当前位置: 首页 > 面试题库 >

在Java中将色调应用于图像

郎同化
2023-03-14
问题内容

我正在尝试为我的程序创建几种相似的视觉样式,每种样式都有不同的颜色主题。为此,我实现了使用图标来表示JCheckBoxs和JRadioButtons
不同状态的用法。除了为每种可能的颜色制作一套完整的图标之外,还有什么方法可以让我只设置一套并在显示图像之前更改图像的色相/饱和度/亮度/ alpha?


问题答案:

有一种方法,但是您必须使用一些BufferedImage转换。创建它们后,请对其进行缓存或保存下来,以便以后轻松重用。本质上,您要从仅使用alpha层关闭像素(还提供平滑的抗锯齿)的黑色图像(源颜色#000000)开始。例如,在源图像中,每个像素都是黑色的,但是alpha通道因像素而异。

首先,请阅读本文以获取一些背景信息: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会将您提供的颜色与源图像中的颜色进行异或。如果源图像为黑色,则您指定的颜色将被写入。对于使用“
0”表示Alpha通道的新颜色,将遵循原始Alpha通道值。最终结果是您要寻找的复合材料。

编辑:

您可以通过以下两种方式之一来加载初始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()方法进行一些更改即可使其生效。



 类似资料:
  • 我有一个,它是一个全黑的小符号。正在我拥有的自定义子类中设置。是否有可能让图像对其应用,从而代替黑色图像将颜色更改为的任何颜色? 我只是想避免创造新的资产。

  • 调整图像颜色和色调概述 调整图像色调和颜色的两种方式是使用调整图层或在 Adobe Camera Raw 中编辑。两种方式都提供了多种控制和灵活性,而且不会永久地改变或损坏原始图像信息。原始图像的完整性得以保存下来。这种非破坏性的编辑方式让您可以灵活地进行进一步的更改、使用其他的编辑方法重新开始编辑,甚至在您保存编辑内容后还原所作调整。 使用调整图层,您可在图像文件中对单独的图层应用编辑,同时保持

  • 我试图从seaborn文档中创建一个这样的图形,但是条纹图的边缘颜色由色调决定。这是我的尝试: 但是男性和女性的调色板似乎是不同的。如何为两个类别使用相同的调色板? 我用海运0.6.dev

  • 问题内容: 我正在研究一些代码来着色Java中的图像。基本上,我想做的就是遵循GIMP的colorize命令,因此,如果我有BufferedImage和Color,则可以使用给定的颜色对Image进行着色。任何人有任何想法吗?我目前做这种事情的最佳猜测是获取BufferedImage中每个像素的rgb值,并使用一定的缩放因子将Color的RGB值添加到其中。 问题答案: 我从未使用过GIMP的co

  • 我试图实现以下和编辑文本,当验证失败时,编辑文本的行将颜色更改为红色,颜色更改是从中心到边缘的动画。 我将视图设置为,隐藏编辑文本底线,在编辑文本下方添加视图以显示该行 我已经尝试了多种方法,但仍然无法完全正确地进入。这是我到目前为止所尝试的 > 在设置背景之前使用缩放动画并开始动画。但在这种情况下,线条被重新绘制,而不仅仅是改变颜色 我已经尝试使用值动画,但我找不到一个合适的方法来应用自定义动画

  • 使用吸管工具设置黑白场 请记住,使用吸管工具可以还原您之前在色阶或曲线中所做的任何调整。如果打算使用吸管工具,则最好先使用它们,然后再用“色阶”滑块或“曲线”点进行微调。 应用曲线或色阶调整。 在“属性”面板中,请执行下列任一操作: 双击“设置黑场”吸管工具来设置黑场。 双击“设置白场”吸管工具来设置白场。 在 Adobe 拾色器中,确定图像中最深和最浅色调的值: 要将黑场值设置为纯黑,请为 R