4

我試圖獲得一個ImageView的顏色,我之前也應用了一個彩色濾鏡。我在4.2.2上運行Nexus 4Android - 從ImageView中獲取ColorFilter ColorFlter應用於Drawable

我正在像這樣改變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),它是原始圖像的顏色,但不是過濾器。 How to Get Pixel Colour in 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,然後得到該點的屏幕背景顏色,而不是圖像。似乎應該有一個更簡單的方法來做到這一點,雖然?

回答

5

您可以用ImageViewor any View for that matter)標記您感興趣的數據以便檢索。例如,標籤與您用來構造相同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(); 
+0

我想出如何獲得的ImageView [ImageView的ImageView的=(ImageView的)gridview.getChildAt(X);],然後能夠使用該標記方法你建議。我無法從getColorFilter方法獲得任何有用的信息,但稍後我會再看一看。這是標記事物的額外步驟,但它起作用!謝謝!! – Ben987654

相關問題