如何获得图像的平均颜色

2022-09-01 01:23:16

我希望能够拍摄图像并找出平均颜色。这意味着如果图像是一半黑色半白色,我会得到一些东西之间......一些灰色阴影。它可能是最常见的单色或中位数。任何平均值都可以。

我怎么能在机器人中做到这一点。


答案 1
Bitmap bitmap = someFunctionReturningABitmap();
long redBucket = 0;
long greenBucket = 0;
long blueBucket = 0;
long pixelCount = 0;

for (int y = 0; y < bitmap.getHeight(); y++)
{
    for (int x = 0; x < bitmap.getWidth(); x++)
    {
        Color c = bitmap.getPixel(x, y);

        pixelCount++;
        redBucket += Color.red(c);
        greenBucket += Color.green(c);
        blueBucket += Color.blue(c);
        // does alpha matter?
    }
}

Color averageColor = Color.rgb(redBucket / pixelCount,
                                greenBucket / pixelCount,
                                blueBucket / pixelCount);

答案 2

我想你必须自己做。

只需创建一个包含所有颜色的 int 数组:

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon);  
bmp = bmp.copy(Bitmap.Config.ARGB_8888, true);    
int intArray[] = new int[bmp.getWidth()*bmp.getHeight()];  
bmp.getPixels(intArray, 0, bmp.getWidth(), 0, 0, bmp.getWidth(), bmp.getHeight());

然后你可以用intArray[0]获得颜色,该值可以0xFFFF0000为红色(最后6个数字是RGB颜色值)。

这是另一个简单的解决方案:

  • 在位图中获取全尺寸图像。

  • 创建 1*1px 的缩放位图。

  • 获取此位图颜色。


推荐