7

我试图在我之前也应用过颜色过滤器的 GridView 中获取 ImageView 的颜色。我在 Nexus 4 上运行 4.2.2

我正在像这样改变 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,然后在该点获取屏幕背景颜色而不是图像。似乎应该有一种更简单的方法来做到这一点?

4

1 回答 1

7

您可以使用您以后有兴趣检索的数据来标记ImageView或任何View相关的)。例如,Color使用您用于构造的相同标记视图PorterDuffColorFilter

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();
于 2013-05-22T06:08:45.670 回答