我有一个rgb图像,我想转换二进制图像0-255。
我在rgb图像和像素中计算阈值,在灰度图像中大于阈值,我设置红色= 255绿色= 255和蓝色= 255并且低于阈值i设置红色= 0绿色= 0和蓝色= 0
private static int colorToRGB(int alpha, int red, int green, int blue) { int newPixel = 0; newPixel += alpha; newPixel = newPixel << 8; newPixel += red; newPixel = newPixel << 8; newPixel += green; newPixel = newPixel << 8; newPixel += blue; System.out.println("asd" + newPixel); return newPixel; }
如果像素为白色,则newPixel的值为-16777216 如果像素为黑色,则newPixel的值为-1
alpha值是常量255 我错在哪里,因为我想要像素的值0和255。
BufferedImage类型为TYPE_INT_ARGB
感谢您的帮助
答案 0 :(得分:1)
老实说,你的问题对我来说没有多大意义。 所以我回答你的问题做出一些假设:
此功能采用rgb颜色和阈值,并返回黑色或白色。
public static int treshold(final int sourceColor, final int treshold) {
// green channel is a good approximation of rgb intensity
int green = (sourceColor >> 8) & 0xFF;
if (green < treshold) {
return 0xFF000000;
} else {
return 0xFFFFFFFF;
}
}
答案 1 :(得分:0)
int newPixel = (alpha << 24) | (red << 16) | (green << 8) | blue;
这会导致颜色编码为0xAARRGGBB,这可能是你想要的。
答案 2 :(得分:0)
除非是透明的蓝色(0 alpha,0 red,0 green,0-255 blue),否则像素的值不会为0 - 255。 Alpha,红色,绿色,蓝色可以在0到255之间,但是放在一起它们会变得更大。如果alpha值为255,则最终会得到整数上的前导1。前导者表示整数是负数。你的最终价值是正确的。此外,Torious只是缩短你的等式,但你的两个计算都可以正常工作。