绘制图像的形状

Duk*_*uke 2 java swing image

在Java swing中,有没有办法只绘制图像的形状,而不是图像本身?如果是这样,我该怎么办呢?

我添加了一张图片来告诉你我的意思: 点击这里.

我的图像由一个单一的形状和一个透明的背景组成.我的目的是能够改变图像的颜色.

Joo*_*gen 5

ImageFilter就是你想要的.可以使用GrayFilter.

class ShapeFilter extends RGBImageFilter {
    public RedBlueSwapFilter() {
        // The filter's operation does not depend on the
        // pixel's location, so IndexColorModels can be
        // filtered directly.
        canFilterIndexColorModel = true;
    }

    public int filterRGB(int x, int y, int rgb) {
        return (rgb & 0x00_ff_ff_ff) == 0x00_ff_ff_ff // White
               || rgb & 0xff_00_00_00) == 0x00_00_00) // or transparent
               ? rgb : 0xff_ff_00_00; // Red opaque
    }
}
Run Code Online (Sandbox Code Playgroud)

使用createImage在Component(JComponent)中的用法:

Image img = ImageIO.readImage(...);
ImageFilter filter = new ShapeFilter();
ImageProducer producer = new FilteredImageSource(img.getSource(), filter);
Image img2 = createImage(producer);
Run Code Online (Sandbox Code Playgroud)