使用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值的主要内容,如果未能解决你的问题,请参考以下文章

怎么将bitmap的RGB值传给二维数组

从 Android.Graphics.Bitmap.GetPixels 获得的 RGB 值与 System.Drawing.Bitmap.GetPixel 略有不同

使用 PIL 获取像素的 RGB

将RGB颜色转换为HEX颜色

BUUCTF Misc

BUUCTF Misc