Android位图像素字节数组没有alpha通道

时间:2016-07-07 21:55:28

标签: java android bitmap rgb

我正在尝试获取像素的字节数组。我正在使用ARGB_8888 decodeByteArray函数。 getPixels()或copyPixelsToBuffer(), 以R G B A形式返回一个数组。是否有可能只从它们获得R G B,而无需创建新数组并复制我不需要的字节。我知道有一个RGB_565,但对于我需要每种颜色一个字节的情况来说它并不是最佳的。

感谢。

1 个答案:

答案 0 :(得分:-1)

使用color=bitmap.getPixel(x,y)获取指定位置的颜色整数。接下来,使用Color类中的red(color)green(color)blue(color)方法,它们表示[0..255]范围内的每个颜色值。

关于alpha通道,可以将其比率乘以每种其他颜色。

以下是一个示例实现:

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();
    ByteBuffer b = ByteBuffer.allocate(width*height*3);
    for (int y=0;y<height;y++)
        for (int x=0;x<width;x++) {
            int index = (y*width + x)*3;
            int color = bitmap.getPixel(x,y);
            float alpha = (float) Color.alpha(color)/255;
            b.put(index, (byte) round(alpha*Color.red(color)));
            b.put(index+1, (byte) round(alpha*Color.green(color)));
            b.put(index+2, (byte) round(alpha*Color.blue(color)));
        }
    byte[] pixelArray = b.array();