我希望将图像中的像素替换为某种程度的黑色(半黑色),使其变为完全黑色。
执行此操作的方法是setRGB(int x, int y, int rgb)
。我知道这个。我不知道的是如何检测半黑的像素。
我尝试过(i
是BufferedImage
):
final int rgb = i.getRGB(x, y);
if (rgb == -16777216) {
i.setRGB(x, y, -16777216);
}
要做到这一点,但它只用纯黑色替换纯黑色的像素。
我也试过调暗图像,但这也不起作用。
关于如何测试泛黑的任何想法?
我的目标:我正在阅读的图片是细文字。我希望通过这个做出更大胆的文本。
答案 0 :(得分:4)
您收到的整数表示红色,绿色,蓝色和Alpha值的组合。基本上,您需要:
作为一个粗略的实现,你可以这样做:
int pixVal = ... getRGB() as you have
int red = (pixVal >>> 16);
int green = (pixVal >>> 8) & 0xff;
int blue = pixVal & 0xff;
int brightness = (red + green + blue) / 3;
if (brightness < 16) {
// pixel is black
}
现在,值16是一个粗略值:理想情况下,您可以根据特定图像进行定制。
纯粹主义者也可能会认为感知到的&#34;亮度&#34;像素的字面意思不是红色/绿色/蓝色像素的平均值(因为人眼对这些组件不是同样敏感)。但这是一个粗略的想法。