Android中位图的getPixels方法说明

时间:2010-11-13 14:12:14

标签: 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);     
}

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

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

感谢。

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

5 个答案:

答案 0 :(得分: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);

答案 1 :(得分:10)

它返回Color class.

的int
  

Color类定义方法   创建和转换颜色整数。   颜色表示为压缩的整数,   由4个字节组成:alpha,red,green,   蓝色。这些值是前所未有的,   意味着存储任何透明度   仅在alpha组件中,而不是   在颜色组件中。该   组件存储如下   (alpha <&lt; 24)| (红色&lt;&lt; 16)| (绿色    的&LT;&LT; 8)|蓝色即可。每个组件范围   在0..255之间,0表示没有   对该组成部分的贡献,和   255意味着100%的贡献。从而   opaque-black将是0xFF000000(100%   不透明,但红色没有贡献,   格力,蓝色和不透明的白色将是   0xFFFFFFFF的

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

Paint pRed = new Paint();
pRed.setColor(Color.RED);

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

答案 2 :(得分:5)

更多:

int alpha=argb>>24;
int red=(argb & 0x00FF0000)>>16;
int green=(argb & 0x0000FF00)>>8;
int blue=(argb & 0x000000FF);

答案 3 :(得分:1)

如果你有alpha,red,green和blue值,你的颜色等于(alpha <&lt; 24)+(红色&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;

要从int中检索alpha,red,green和blue值,请说argb:

int alpha=argb>>24;
int red=(argb-alpha)>>16;
int green=(argb-(alpha+red))>>8;
int blue=(argb-(alpha+red+green));

答案 4 :(得分:0)

除此之外,我认为它应该是

bitmapFoo.getPixels(pixels, 0, width, 0, 0, width, height); 

坐标从0开始,对吗?