JavaFX画布绘制带有透明度的图像

6

使用JavaFX Canvas,你可以使用drawImage()绘制图像。但是,有没有办法以透明度的50%绘制图像(仅以50%的不透明度绘制),或者用颜色进行着色?

1个回答

18

控制Canvas绘图操作的方法

有一些方法可以控制canvas绘图操作的属性:

示例用法

蝙蝠信号灯

程序使用的源图像是:

蝙蝠信号

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.effect.*;
import javafx.scene.image.Image;
import javafx.scene.paint.*;
import javafx.stage.Stage;

public class CanvasEffects extends Application {

    @Override
    public void start(Stage stage) {
        final Image image = new Image(IMAGE_LOC);

        final int NUM_IMGS = 5;
        final double W = image.getWidth();
        final double H = image.getHeight();

        final Canvas canvas = new Canvas(W * NUM_IMGS, H);
        final GraphicsContext gc = canvas.getGraphicsContext2D();
        gc.setFill(Color.GOLD);
        gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());

        gc.setGlobalBlendMode(BlendMode.SCREEN);

        for (int i = 0 ; i < NUM_IMGS; i++) {
            final double opacity = 1 - ((double) i) / NUM_IMGS;
            System.out.println(opacity);
            gc.setGlobalAlpha(opacity);
            gc.setEffect(new BoxBlur(i * 2, i * 2, 3));

            gc.drawImage(image, i * W, 0);
        }

        stage.setScene(new Scene(new Group(canvas)));
        stage.show();
    }
    public static void main(String[] args) {
        launch(args);
    }

    // icon license: Linkware (Backlink to http://uiconstock.com required) commercial usage not allowed.
    private static final String IMAGE_LOC = "http://icons.iconarchive.com/icons/uiconstock/flat-halloween/128/Halloween-Bat-icon.png";
}

1
你知道在哪里可以找到所有这些 Effect 子类的列表吗?另外谢谢! - Saturn
4
javafx.scene.effect javadoc中。 - jewelsea
@Voldemort 在Eclipse中,将光标放在Effect类名上,然后按F4键查看类型层次结构。 - piegames
故障修复 >>> 最终双倍h = image.getHeight(); - d33j
谢谢d33j,我已经修复了你在示例代码中提到的错误。 - jewelsea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接