2012-06-18 36 views
1

我有一個奇怪的問題,得到被點擊的點的顏色。我創建了一個圖像(.bmp)並用油漆罐填充。沒有漸變或其他顏色。大多數時候,當我觸摸屏幕時,我會看到我期待的顏色,但有時我會看到一種稍微不同的顏色。我的代碼看起來非常簡單就夠了:Android的onTouch返回錯誤的顏色

final Bitmap bm2 = BitmapFactory.decodeFile(image_overlay); 
if (bm2!=null) { 
    overlayimage.setImageBitmap(bm2); 
    image.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent mev) { 
      Log.d(MY_DEBUG_TAG, "onTouch()"); 
      DecodeActionDownEvent(v, mev, bm2); 
      return false; 
     } 
    }); 
} 


private void DecodeActionDownEvent(View v, MotionEvent ev, Bitmap bm2) 
{ 
    Log.d(MY_DEBUG_TAG, "DecodeActionDownEvent()"); 
    xCoord = new Integer((int)ev.getRawX()); 
    yCoord = new Integer((int)ev.getRawY()); 
    colorTouched = bm2.getPixel(xCoord, yCoord); 
    Log.d(MY_DEBUG_TAG, "The coordinates touched were x: " + xCoord + "; y: " + yCoord); 
    Log.d(MY_DEBUG_TAG, "The color touched was (hex) " + Integer.toHexString(colorTouched)); 
} 

最近我得到了一個「小姐」,並通過移動吸管工具,直到它的確切位置檢查圖像的座標,像素沒有比不同該區域中的其他像素。

期待android返回確切的顏色是不是「安全」?如果我用#ff424542繪製目標,假設如果我擊中目標,我會得到#ff424542的像素顏色是不安全的?在這種情況下,android正在返回#ff4a454a。附加的圖像是我的「image_overlay」文件。我所瞄準的區域是右中間的深灰色。就像我說的那樣,大部分時間它都很完美,但是每隔一段時間我都會記錄一個小姐,即使我清楚地在目標區域。從我的日誌中,最近的錯失是x:360,y:399和x:368,y:399。成功的命中是x:363,y:393和x:365,y434。

image_overlay

回答

0

我猜你用吸管工具在一個應用程序在PC上,在那裏你產生的圖像?然後,您會認爲您在Android中使用的圖像與您在PC上使用的圖像完全相同。但是,這不是一個安全的假設。你的源位圖的屬性是什麼,例如分辨率,DPI等,然後看看Bitmap.decodeFile。線索在「解碼」中。默認情況下(因此有關位圖屬性的問題),Android不會簡單地從文件說明符中讀取位圖並將其加載到內存中。例如,我不確定沒有深入研究源代碼,可能decodeFile會抖動結果位圖。

您應該使用BitmapFactoryOptions來控制輸入位如何解碼:

http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

+0

我其實是想知道,這樣的事情是怎麼回事。我懷疑你是對的。謝謝你的提示! – MrGibbage

+0

不客氣,希望它適合你。如果確實如此,請回來接受答案。乾杯 – Simon