Android中位图的getPixels方法说明

use*_*209 11 java android colors bitmap

如何从内置方法getPixels为Bitmap解释返回的数组?

这是我的代码:

public void foo() {
    int[] pixels;
    Bitmap bitmapFoo = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.test2);             
    int height = bitmapFoo.getHeight();
    int width = bitmapFoo.getWidth();

    pixels = new int[height * width];

    bitmapFoo.getPixels(pixels, 0, width, 1, 1, width - 1, height - 1);     
}
Run Code Online (Sandbox Code Playgroud)

返回的数组"像素"的值从-988,602,635到1,242,635,509,这只是我在一个简单的PNG文件上的几种颜色.如何解释从此方法返回的数字?

编辑:我意识到这个整数代表一种颜色.我只是不明白如何将这个单个整数解释为构成颜色的RBG和alpha值.

谢谢.

PS.如果你问自己,"他想做什么?" 我试图找出一种动态修改位图颜色的方法.

Jon*_*per 14

您还可以执行以下操作以从int中检索颜色:

int mColor = 0xffffffff;

int alpha = Color.alpha(mColor);
int red = Color.red(mColor);
int green = Color.green(mColor);
int blue = Color.blue(mColor);
Run Code Online (Sandbox Code Playgroud)


Bry*_*nny 11

它返回Color类的int .

Color类定义了创建和转换颜色int的方法.颜色表示为打包的int,由4个字节组成:alpha,red,green,blue.这些值未经过多次修改,这意味着任何透明度都只存储在alpha组件中,而不是存储在颜色组件中.组件存储如下 (alpha << 24)| (红色<< 16)| (绿色 << 8)| 蓝色.每个组件的范围在0..255之间,0表示对该组件没有贡献,255表示100%贡献.因此,不透明黑色将是0xFF000000(100%不透明,但红色,格力,蓝色和不透明白色的贡献不会是0xFFFFFFFF

例如,当您使用Paint对象时:

Paint pRed = new Paint();
pRed.setColor(Color.RED);
Run Code Online (Sandbox Code Playgroud)

setColor期待一个int.Color.RED是其预定义"红色"含义的int值.


Joh*_*ini 5

更:

int alpha=argb>>24;
int red=(argb & 0x00FF0000)>>16;
int green=(argb & 0x0000FF00)>>8;
int blue=(argb & 0x000000FF);
Run Code Online (Sandbox Code Playgroud)