gpt4 book ai didi

java - 在java中将色调应用于图像

转载 作者:IT老高 更新时间:2023-10-28 20:41:29 25 4
gpt4 key购买 nike

我正在尝试为我的程序创建几种相似的视觉风格,每种都有不同的颜色主题。为此,我实现了使用图标来表示 JCheckBoxJRadioButton 的不同状态。与其为每种可能的颜色制作一整套图标,有什么方法可以让我只取一组并在显示之前更改图像的色调/饱和度/亮度/alpha?

最佳答案

有一种方法,但您必须使用一些 BufferedImage 转换。创建它们后,将它们缓存或保存以供以后轻松重复使用。从本质上讲,您希望从仅使用 Alpha 层关闭像素(也提供平滑的抗锯齿)的黑色图像(源颜色 #000000)开始。例如,在您的源图像中,每个像素都是黑色的,但 Alpha channel 因像素而异。

首先,阅读这篇文章了解一些背景信息:http://www.javalobby.org/articles/ultimate-image/

完成该入门后,您需要将图像加载到 BufferedImage 中:

BufferedImage loadImg = ImageUtil.loadImage("C:/Images/myimg.png");

接下来你需要创建一个新的 BufferedImage 来进行转换:

public BufferedImage colorImage(BufferedImage loadImg, int red, int green, int blue) {
BufferedImage img = new BufferedImage(loadImg.getWidth(), loadImg.getHeight(),
BufferedImage.TRANSLUCENT);
Graphics2D graphics = img.createGraphics();
Color newColor = new Color(red, green, blue, 0 /* alpha needs to be zero */);
graphics.setXORMode(newColor);
graphics.drawImage(loadImg, null, 0, 0);
graphics.dispose();
return img;
}

本质上,setXORMode 会将您提供的颜色与源图像中的颜色进行异或。如果源图像是黑色的,那么您提供的任何颜色都将按照您指定的方式写入。对于 Alpha channel 使用“0”的新颜色,原始的 Alpha channel 值将得到尊重。最终结果就是您正在寻找的复合 Material 。

编辑:

您可以通过以下两种方式之一加载初始 BufferedImage。最简单的方法是使用 Java 较新的 ImageIO API:http://download.oracle.com/javase/6/docs/api/javax/imageio/ImageIO.html将文件直接加载到 BufferedImage。调用看起来像这样:

BufferedImage img = ImageIO.read(url); 

或者,您可以创建一个使用 ToolKit 读取图像的方法。

public BufferedImage loadImage(String url) {
ImageIcon icon = new ImageIcon(url);
Image image = icon.getImage();

// Create empty BufferedImage, sized to Image
BufferedImage buffImage =
new BufferedImage(
image.getWidth(null),
image.getHeight(null),
BufferedImage.TYPE_INT_ARGB);

// Draw Image into BufferedImage
Graphics g = buffImage.getGraphics();
g.drawImage(image, 0, 0, null);
return buffImage;
}

当然,如果您注意的话,我们必须执行完全相同的操作来将图像读入缓冲图像,就像我们为它着色一样。简而言之,如果您将 colorImage 方法的签名更改为接受 Image 对象,您只需对 getWidth() 和 getHeight() 方法进行几处更改即可让它工作。

关于java - 在java中将色调应用于图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4248104/

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