क्या किसी को पता है क्यों पारदर्शिता पर ड्राइंग के लिए एक कैनवास बिल्कुल ठीक काम करता है का उपयोग कर 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();
}
});
}
}