2011-03-11 84 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将返回图像的像素颜色。