มีใครรู้ว่าทำไมความโปร่งแสงล่องหวาดบนผ้าใบทำงานสบายดีทุกอย่าใช้ drawImage()แต่ไม่ได้ทำงานทั้งหมกับ PixelWriter? ฉันตอนแรกคิดว่ามันอาจจะมีบางอย่างเกี่ยวข้องกับการผสมหรือคนอื่นโหมด/การตั้งค่าบนผ้าใบหยาบ/คอนเท็กซ์แต่ไม่มีโชคบ้างไหนกับเรื่องนั้นหรอก
ฉันต้องการต่อพิกเซลตัวแปรความโปร่งแสงล่องหนไม่เป็นโสดความโปร่งแสงล่องหนค่าสำหรับทั้งหมดดึงดำเนินงานการ)กิบัติงานอยู่ ฉันจะเป็นการแสดงผลเป็นจำนวนของ"ขั้น"(คล้ายกับว่า GIMP เสื้อผ้าหลายชั้นทำงานกับเลือกเพิ่มความโปร่งแสงล่องต่อพิกเซล). การเพิ่มเติมเปิดคำถามคือไม่ว่าผมดีกว่านี้ก่อนวาระสุดท้ายตั้งใจจะแสดงผลหน้าจอที่ให้ WritableImage แล้วก็วาดกันผ้าใบสำหรับการแสดงเหตุผลแต่นั่นดูเหมือนจะปราบประเด็นของการใช้เป็นผ้าใบในตอนแรก...
ด้านล่างคือเป็นตัวอย่างซึ่งนั่นแสดงเป็นบางส่วนของความโปร่งแสงสีเป็นแรกที่ดึงดูดภาพแล้วเพื่อนคนงานและตรงไปยังผ้าใบกับ setColor(). ในความโปร่งแสงพื้นที่ภาพวาดระทึบนพื้นที่เป็น setColor นส่วนหนึ่ง. เราจะทำยังไง setColor()ต้องเคารพสีของอัลฟาความโปร่งแสงล่องสำหรับแต่ละพิกเซล?
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.image.WritableImage;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.stage.Stage;
public class TransparencyTest extends Application {
private static final int width = 800;
private static final int height = 600;
private Scene scene;
private final Canvas canvas = new Canvas(width, height);
@Override
public void start(Stage stage) {
scene = new Scene(new Group(canvas));
stage.setScene(scene);
render();
stage.show();
exitOnEsc();
}
private void render() {
drawTransparentBg(canvas, 0, 0, width, height);
Color color = Color.web("#77000077");
WritableImage image = new WritableImage(200, 200);
for (int x = 0; x < 200; x++) {
for (int y = 0; y < 200; y++) {
image.getPixelWriter().setColor(x, y, color);
}
}
canvas.getGraphicsContext2D().drawImage(image, 50, 50);
for (int x = 0; x < 50; x++) {
for (int y = 0; y < 50; y++) {
canvas.getGraphicsContext2D().getPixelWriter().setColor(x, y, color);
}
}
}
public void drawTransparentBg(Canvas canvas, int xPos, int yPos, int width, int height) {
int gridSize = 8;
boolean darkX = true;
String darkCol = "#111111";
String lightCol = "#222266";
for (int x = xPos; x < canvas.getWidth(); x += gridSize) {
boolean dark = darkX;
darkX = !darkX;
if (x > width) {
break;
}
for (int y = yPos; y < canvas.getHeight(); y += gridSize) {
if (y > height) {
break;
}
dark = !dark;
String color;
if (dark) {
color = darkCol;
} else {
color = lightCol;
}
canvas.getGraphicsContext2D().setFill(Paint.valueOf(color));
canvas.getGraphicsContext2D().fillRect(x, y, gridSize, gridSize);
}
}
}
private void exitOnEsc() {
scene.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
if (event.getCode().equals(KeyCode.ESCAPE)) {
Platform.exit();
}
});
}
}