如何获得图像的平均颜色?

新手上路,请多包涵

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

我怎样才能在 Android 中做到这一点?

原文由 124697 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 726
2 个回答
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);

原文由 Dan O 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想你必须自己做。

只需创建一个包含所有颜色的 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 的缩放位图。

  • 获取此位图颜色。

原文由 Stephane Mathis 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题