使用getPixel()方法然后检查rgb值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用getPixel()方法然后检查rgb值相关的知识,希望对你有一定的参考价值。
我正在使用getPixel()方法返回位图中每个像素的rgb值。然后我使用if()语句将rgb值与我自己预定义的rgb值进行比较,然后在语句为真时执行代码。如下所示:
for(int x=startX; x<w; x++){
for(int y=startY; y<h; y++){
int pixel = img.getPixel(x, y);
if(pixel == Color.rgb(255, 255, 255)); //some code
if(pixel == Color.rgb(255, 0, 0)); //some code
if(pixel == Color.rgb(255, 255, 0)); //some code
if(pixel == Color.rgb(120, 60, 0)); //some code
}
我的问题是,当前三个if()语句被执行时,第四个从不执行。我知道我的图像包含所有rgb值的像素,因为我自己创建了图像。我猜这个问题是因为颜色类中没有预定义变量,rgb值为(120,60,0)。所以基本上我想知道是否还有这个问题。也许比getPixel()更好的方法?我只需要第四个if()语句中的代码就可以执行。
编辑 - 更多信息:
我的图片有一个png扩展名。我通过以下方式将其加载到位图:
public static Bitmap loadBitmap(String filename, boolean transparency) {
InputStream inputStream = null;
try {
inputStream = MainActivity.assets.open(filename);
} catch (IOException e) {
e.printStackTrace();
}
BitmapFactory.Options options = new BitmapFactory.Options();
if (transparency) {
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
} else {
options.inPreferredConfig = Bitmap.Config.RGB_565;
}
Bitmap bitmap = BitmapFactory.decodeStream(inputStream, null,
options);
return bitmap;
}
通过assets变量检索图像,该变量是我的MainManager类型AssetManager中的静态变量。我通过声明assets = getassets()来初始化这个变量。我的图像位于我的资产文件夹中,然后AssetManager将检索该文件夹。
我在我的一个应用程序中做了相同的事情,getPixel()工作得很好。我想问题是你使用Bitmap.Config.RGB_565。
在这种格式中,每个像素每个颜色通道(红色,绿色,蓝色)没有1个字节(8位)。但它为RED提供5位(0-31),为GREEN提供6位(0-63),为BLUE提供5位。
因此,当您将像素从PNG放到RGB_565位图时,它们将从每个颜色通道的256个可能值缩放到红色和蓝色通道的32个值以及绿色的64个值。
请注意,此转换不是线性的。这意味着您不能只将PNG中的RED值除以8并获得RGB_565的RED值。
以上是关于使用getPixel()方法然后检查rgb值的主要内容,如果未能解决你的问题,请参考以下文章
从 Android.Graphics.Bitmap.GetPixels 获得的 RGB 值与 System.Drawing.Bitmap.GetPixel 略有不同