我试图用下面的代码分析一个像素

    BufferedImage image;
    try {
        image = ImageIO.read(new File(fileName));
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }

    final byte[] pixels = ((DataBufferByte)
    image.getRaster().getDataBuffer()).getData();final int pixelLength = 4;
        for (int pixel = 0, row = 0, col = 0; pixel < pixels.length; pixel += pixelLength) {
            byte alpha = pixels[pixel];
            byte blue = pixels[pixel + 1];
            byte green = pixels[pixel + 2];
            byte red = pixels[pixel + 3];
            //analyze colors
            col++;
            if (col == width) {
                col = 0;
                row++;
            }
        }

我有一个最简单的例子,我有一个图像有两个像素,一个有透明度,一个没有。
像素1:带透明度的红色
HEX: FF0000, Alpha 140, (RGB: 255, 0, 0)

像素2:没有透明度的绿松石
HEX: 7FFFD8, Aplha  255, (RGB: 127, 255, 216)

上面的像素数组具有以下值:[-116, 0, 0, -1, -1, -40, -1, 127]
其中每个像素有4个字节,顺序是a,b,g,r(我想)。
所以我的问题是,如何从上面的结果得到我使用的0-255个值:)

最佳答案

我不确定我是否理解这个问题…但这是一个简单的答案,基于我的理解。
不必讨论two's complement,您可以遍历整个数组并使用以下规则将其转换:
如果该值小于零,则添加256
如果值为零或更多,则保持原样
这有用吗?

08-04 12:02