如何在缩放的位图上获取像素颜色值?

时间:2011-03-11 05:48:31

标签: android bitmap zooming

我正在使用此链接使用sony ericssion教程进行缩放和平移

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

当我在图像的ontouchevent中使用Bitmap.getPixel(x,y)时,它会给出不同的RGB颜色值。在缩放位图之后会发生同样的问题。我已经尝试过xy坐标除以缩放因子。它不是为我工作。

可以帮助我解决这个问题。如何在缩放的位图上获取颜色值?

2 个答案:

答案 0 :(得分:1)

getPixel正在处理你的unzoomed Bitmap。 我假设X和Y来自触摸事件并且与View相关。 我在你的链接中看到该示例正在使用两个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个矩形来计算矩阵:

//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]);

我没有对它进行测试,但它应该可行或者至少可以帮助您找到解决方案。

答案 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将返回图像的像素颜色。