如何从内置方法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。如果你问自己,“他想做什么?”我试图想出一种动态修改位图颜色的方法。
答案 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.
的intColor类定义方法 创建和转换颜色整数。 颜色表示为压缩的整数, 由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开始,对吗?