2011-03-11 137 views
2

我使用縮放和與索愛教程平移與該鏈接如何獲取像素縮放位圖上的顏色值?

http://blogs.sonyericsson.com/developerworld/2010/06/09/android-one-finger-zoom-tutorial-part-3/

並且當我在image.Its賦予顏色的不同不同的RGB值的使用的onTouchEvent Bitmap.getPixel(X,Y) 。縮放位圖後出現同樣的問題。我試圖通過縮放因子來分割xy座標。它不適合我。

可以PLZ有人幫我解決這個問題如何獲得放大的位圖上的顏色值?

+0

嘿,我面臨同樣的問題。請發帖如果你有任何問題的答案! – 2017-07-10 09:37:13

回答

1

getPixel正在處理您的unzoomed位圖。 我假設X和Y來自觸摸事件,並且與視圖有關。 我在你的鏈接中看到示例正在使用兩個Rect對象來調整大小。

@Override 
protected void onDraw(Canvas canvas) { 
    if (mBitmap != null && mState != null) { 
     canvas.drawBitmap(mBitmap, mRectSrc, mRectDst, mPaint); 
    } 
} 

我想這也是你是如何做到的。 簡單地將您的座標與縮放比例分開將不起作用,因爲X和Y是相對於您的視圖而不是RectDst。

我通常使用Matrix對象來進行縮放,因爲它很容易重現,反轉等...... 例如,如果使用Matrix進行了縮放,您可以將其反轉,將其設爲X ,Y,並返回相對於位圖的原始座標。

但是你有辦法做到這一點,無論如何,通過使用2個Rects計算矩陣:

//Recreate the Matrix using the 2 Rects 
Matrix m = new Matrix() 
m.setRectToRect(mRectDst, mRectSrc, false); 
//Transform the coordinates back to the original plan 
float[] src = {x,y}; 
float[] dst = new float[2]; 
m.mapPoints(src, dst); 
myBitmap.getPixel(dst[0], dst[1]); 

我沒有測試它,但它應該工作,或至少幫助您找到您的解決方案。

0

Bitmap.getPixel(x,y)得到的結果很慢。 喜歡

int [] byteArry= new int [Bitmap.getWidth()*Bitmap.getHeight()] ; 

Bitmap.getPixels(byteArry, 0, Bitmap.getWidth(), 0, 0, slotBitmap_1.getWidth(), Bitmap.getHeight()); 

byteArry將返回圖像的像素顏色。