rgb图像转换java bufferedImage中的二进制图像

时间:2012-04-14 20:45:02

标签: java binary rgb bufferedimage

我有一个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

感谢您的帮助

3 个答案:

答案 0 :(得分:1)

老实说,你的问题对我来说没有多大意义。 所以我回答你的问题做出一些假设:

  1. 您有一个全局阈值[0-255]
  2. 阈值应应用于灰度值,因此您需要将rgb像素转换为灰度值
  3. 程序应尽可能快
  4. 你想在java中做到这一点
  5. 此功能采用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只是缩短你的等式,但你的两个计算都可以正常工作。