gpt4 book ai didi

java - java Swing 中可以修改图像的颜色吗?

转载 作者:行者123 更新时间:2023-12-02 06:20:55 27 4
gpt4 key购买 nike

我正在制作模拟动画,我的实体使用的图像是黑白的小 PNG 文件(如果这有什么区别的话)。我想知道在作为 BufferedImage 导入后是否有任何方法可以更改图像的颜色(例如,将黑色更改为红色,或在黑色上覆盖红色滤镜)?或者我最好的选择是在 Java 之外创建图标的单独颜色版本并将它们作为单独的图像导入?

最佳答案

您可以使用java.awt.image.RGBImageFilter类

我个人还没有玩过这个,我采用了另一种方式,即将图标放入像素(整数)数组中并自行操作。

有了这个,你可以创建一个 ImageSourceInt 的实例(我这样调用它),传递一个 ImageIcon,摆弄它

(canvasData 是 ARGB-int 格式的像素数组 - 每个 channel 1 个字节 = 4 个字节 = 1 个 int)

并检索 BufferedImage( View ,而不是副本)以供 Swing 使用。

对于后者,请调用 getReferenceImage() 方法。

顺便说一句,如果您不知道 scanSize(成像中的常用术语),只需将其视为图像的宽度即可。

(很抱歉代码格式错误,我是新来的)

public class ImageSourceInt implements ImageSource {

int[] canvasData;

int width;

int height;

int scanSize;

int lineCount;


/**
* @param source make sure it is loaded or this ImageSource will be empty.<br>
* sizeIncrementWidth and sizeIncrementHeight are set to 1
*/
public ImageSourceInt(ImageIcon source){
if (source == null) {
this.canvasData = new int[0];
return;
}
this.width = source.getIconWidth();
this.height = source.getIconHeight();
this.scanSize = source.getIconWidth();
this.lineCount = source.getIconHeight();

this.canvasData = new int[this.width*this.height];

// PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int
// off, int scansize)
PixelGrabber grabber = new PixelGrabber(source.getImage(), 0,
0, this.width, this.height, this.canvasData, 0, this.scanSize);
try {
grabber.grabPixels();
} catch (InterruptedException e) {
e.printStackTrace();// must not be...
}
}

/**
* @return a BufferedImage with the data of this ImageSource (referenced)<br>
* IMPORTANT: if the size changed, the BufferedImage will get invalid, causing strange effects or exceptions
*/
public BufferedImage getReferenceImage(){
DataBuffer buf = new DataBufferInt(this.canvasData, this.canvasData.length);
WritableRaster wRaster = Raster.createPackedRaster(buf, this.getWidth(), this.getHeight(), this.getScanSize(),
new int[]{0x00FF0000, 0x0000FF00, 0x000000FF, 0xFF000000}, new Point());
BufferedImage bi = new BufferedImage(ColorModel.getRGBdefault(), wRaster, false, null);
return bi;
}

}

关于java - java Swing 中可以修改图像的颜色吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21041108/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com