在java中创建alpha图像

时间:2012-04-07 22:02:33

标签: java java-2d

我即将开始研究一个项目,该项目将生成一些带有alpha(渐变)的PNG,并希望在java中以编程方式绘制它们。

对于(一个简单的)示例,我想绘制一个框,添加一个阴影,然后将其保存为PNG文件,然后可以将其覆盖在其他图形上。

  1. 标准JRE系统库可以实现吗?
  2. 哪些库会使这种操作变得简单?
  3. 感谢。

1 个答案:

答案 0 :(得分:5)

  

标准JRE系统库可以实现吗?

是的,它是可能的并且非常简单。下面的代码生成此图像(透明png):

screenshot

public static void main(String[] args) throws IOException {

    int x = 50, y = 50, w = 300, h = 200;

    // draw the "shadow"
    BufferedImage img = new BufferedImage(400, 300, BufferedImage.TYPE_INT_ARGB);
    Graphics g = img.getGraphics();
    g.setColor(Color.BLACK);
    g.fillRect(x + 10, y + 10, w, h);

    // blur the shadow
    BufferedImageOp op = getBlurredOp();
    img = op.filter(img, null);

    // draw the box
    g = img.getGraphics();
    g.setColor(Color.RED);
    g.fillRect(x, y, w, h);

    // write it to disk
    ImageIO.write(img, "png", new File("test.png"));
}

private static BufferedImageOp getBlurredOp() {

    float[] matrix = new float[400];
    for (int i = 0; i < 400; i++)
        matrix[i] = 1.0f/400.0f;

    return new ConvolveOp(new Kernel(20, 20, matrix),
                          ConvolveOp.EDGE_NO_OP, null);
}
  

哪些库会使这种操作变得简单?

我会说这取决于你的其他用例。对于像盒子和椭圆形这样的简单形状,我会选择上面的解决方案,不需要库。