【问题标题】:prominent color from bitmap without using Palette Api Android位图中的突出颜色而不使用 Palette Api Android
【发布时间】:2016-01-20 22:58:33
【问题描述】:

我想在不使用 Palette Api Android 的情况下从位图中获得最显眼的颜色代码,例如(黑色、白色、蓝色等)。请帮助

【问题讨论】:

  • Palette 是专门为这种情况设计的。您为什么要寻找替代方案?
  • 因为我没有在我的项目中使用 v7 支持库...我现在不想使用它

标签: java android image-processing bitmap


【解决方案1】:

好的,所以你需要做的就是模糊位图,然后挑选像素颜色。您可以简单地将其缩小到一个小尺寸,然后将其放大到一个更大的尺寸(Bitmap.createScaledBitmap())。这将使您的位图像素化。然后获取像素的颜色(Bitmap.getPixels(x,y))。

尝试缩放,以使最终的位图包含更少的颜色作为像素。

【讨论】:

  • 我可以得到像素的颜色...但是我怎么知道哪个颜色比位图中的其他颜色最突出?
  • 当您对图像进行模糊处理时,只会显示突出的颜色。如果一种颜色在位图中仅出现 1%,则在对其进行模糊处理时,该颜色会丢失。正如我提到的,您需要尝试模糊位图。
  • 好的,让我试试,然后我会在我完成后通知您。谢谢提示
【解决方案2】:

您想获得阴影图像吗?无论如何,你需要这样的东西:

import android.graphics.Color;

int reds = 0;
int blues = 0;
int greens = 0;

int[] pixels = new int[myBitmap.getHeight()*myBitmap.getWidth()];
myBitmap.getPixels(pixels, 0, myBitmap.getWidth(), 0, 0, myBitmap.getWidth(), myBitmap.getHeight());
for (int i=0; i<pixels.length; i++) {

int red = Color.red(colour);
int blue = Color.blue(colour);
int green = Color.green(colour);

/* Or it
    r = (pix[i]) >> 16 & 0xff;
    g = (pix[i]) >> 8 & 0xff;
    b = (pix[i]) & 0xff;*/
//int alpha = Color.alpha(colour);

if (red >= blue && red >= green) reds++;
if (blue >= red && blue >= green) blues++;
if (green >= blue && green >= red) greens++;
}

【讨论】:

  • 我设法得到这样的颜色,但你能告诉我如何从位图中删除特定颜色吗?虽然我设法去除了颜色,但它并没有完全去除?
  • 您需要获取色调。但是老兄,你问的是没有偶数+的更多信息。阅读:stackoverflow.com/questions/9018016/how-to-compare-two-colors
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 2010-10-29
相关资源
最近更新 更多