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

在Java中为图像着色

范修伟
2023-03-14
问题内容

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


问题答案:

我从未使用过GIMP的colorize命令。但是,如果获取每个像素的RGB值并向其添加RGB值,则应真正使用
LookupOp

这是我编写的将BufferedImageOp应用于BufferedImage的一些代码。

从上面使用尼克斯的例子,这里我将如何做。

假设每个像素的Y = 0.3 * R + 0.59 * G + 0.11 * B

(R1,G1,B1)是您要着色的

protected LookupOp createColorizeOp(short R1, short G1, short B1) {
    short[] alpha = new short[256];
    short[] red = new short[256];
    short[] green = new short[256];
    short[] blue = new short[256];

    int Y = 0.3*R + 0.59*G + 0.11*B

    for (short i = 0; i < 256; i++) {
        alpha[i] = i;
        red[i] = (R1 + i*.3)/2;
        green[i] = (G1 + i*.59)/2;
        blue[i] = (B1 + i*.11)/2;
    }

    short[][] data = new short[][] {
            red, green, blue, alpha
    };

    LookupTable lookupTable = new ShortLookupTable(0, data);
    return new LookupOp(lookupTable, null);
}

它创建一个BufferedImageOp,如果mask布尔值为true,则将屏蔽每种颜色。

调用起来也很简单。

BufferedImageOp colorizeFilter = createColorizeOp(R1, G1, B1);
BufferedImage targetImage = colorizeFilter.filter(sourceImage, null);

如果这不是您想要的,我建议您进一步研究BufferedImageOp。

这也将更加有效,因为您无需对不同的图像进行多次计算。或者只要R1,G1,B1值不变,就在不同的BufferedImages上再次进行计算。



 类似资料:
  • 问题内容: 使用Java的库如何将32bpp图像(ARGB)转换为16bpp图像(ARGB)?出于好奇,在像素级别上,此转换有什么作用?如果我有一个int值保存一个像素值(具有所有通道),那么在发生转换后,该int会有什么不同? 问题答案: 将32位AARRGGBB值转换为16位ARGB值将是这样的: 它会将所有内容粘贴在低16位中,而将高16位保留为0。 对于每个通道,您会丢失颜色信息的低4位,

  • 问题内容: 如何将图像的白色背景转换为透明背景?谁能给我打电话怎么做? 问题答案: Google的第一个结果是: 使颜色透明 http://www.rgagnon.com/javadetails/java-0265.html 它使图像的蓝色部分透明,但是我敢肯定您可以对其进行调整以使用白色 (提示:传递给函数,而不是)

  • 一个多星期以来,我一直在stackoverflow和许多其他网站上搜索,想找到一种方法,在包含事件的日历视图中为某些日期着色,但运气不佳。文档中描述的唯一颜色变化是聚焦日期和聚焦周的颜色变化。 我得到了一个带有setOnDateChangeListener的CalendarView,它打开了一个对话框片段,用户可以在其中添加信息并将其保存到数据库中。我想从数据库中提取带有信息的日期,并将这些日期显

  • 问题内容: 我必须创建一个简单的2D动画,而无需为此使用各种图元来绘制线,圆等。必须通过操纵像素并实现通过对像素着色来绘制线,圆等的算法之一来完成。 我曾考虑为此目的使用Turbo C,但我使用ubuntu。因此,我尝试使用dosbox安装和运行turbo C,但无济于事。 现在,我唯一的选择是Java。是否可以在Java中操作像素?我找不到适合自己的好教程。如果可以提供相同的示例代码,那将是很好

  • 问题内容: 如何使用Java在图像上创建水印?我需要将用户输入的文本添加到图像上方的指定位置。任何示例代码/建议都将有所帮助。 问题答案: 您可以查看http://web.archive.org/web/20080324030029/29/http://blog.codebeach.com/2008/02/watermarking- images-in- java-中 的“绘制水印”部分servl

  • 我尝试使用背景属性为图像着色,如下所示: http://jsfiddle.net/6ELSF/1047/ 但是图像并不像预期的那样“有色”。 悬停时,它看起来像这样: 但我希望它看起来像这样: 我试着测试一些我发现的关于图像叠加的解决方案,但在我的示例中都不起作用。如何以最简单的方式实现这一点?