从ImageView中获取颜色,并将ColorFIlter应用于Drawable



我试图在GridView中获得ImageView的颜色,我之前也应用了颜色过滤器。我用的是4.2.2版本的Nexus 4

我像这样改变了ImageView的颜色。在使用滤镜之前,图像的实际颜色是白色的。

Drawable myIcon = getResources().getDrawable(R.drawable.bufferbuildercolor3);                       
myIcon.setColorFilter(new PorterDuffColorFilter(Color.rgb(Color.red(color),Color.green(color), Color.blue(color)),PorterDuff.Mode.MULTIPLY));

这实际上并没有改变源图像的颜色这正是我想要的。那永远是白色的

我的问题是我试图引用的颜色好后,我已经失去了我用来设置它的数据。我想长按ImageView获取它的颜色

我在下面的问题中发现了一些代码,但它似乎不起作用,因为它总是返回白色(255,255,255),这是原始图像的颜色,但不是过滤器。如何在Android上获得像素颜色?

ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);

我试过下面的东西,但它只是崩溃当我调用getColorFilter

ImageView image = (ImageView)findViewById(R.drawable.bufferbuildercolor3);
ColorFilter test = image.getColorFilter();

我不知道还能做什么,除了可能找到实际网格位置的X/Y,然后在该点获得屏幕的背景颜色而不是图像。似乎应该有一种更简单的方法来做到这一点?

可以用以后要检索的数据标记ImageView(或任何View)。例如,用您用来构造PorterDuffColorFilter的相同的Color标记视图:

Color tagColor = Color.rgb(Color.red(color),Color.green(color), Color.blue(color));
// tag
imageview.setTag(tagColor);
// get tag
tagColor = (Color) imageview.getTag();

显然,当相关的视图被垃圾收集时,标签将被垃圾收集。

或者,如果您对第三个代码片段进行修复,则可能实际工作。目前你试图通过寻找一个可绘制的 id来膨胀视图——这是没有意义的。id的格式为R.id.imageview_id,即:

ImageView image = (ImageView) findViewById(R.id.imageview);
ColorFilter test = image.getColorFilter();

相关内容

最新更新