我有一个奇怪的问题是获得被触摸的点的颜色。我创建了一个图像(.bmp)并用油漆罐填充它。没有渐变或其他颜色。大多数时候,当我触摸屏幕时,我会得到我期待的颜色,但有时我会得到略微不同的颜色。我的代码似乎很简单:
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。
答案 0 :(得分:0)
我猜你在PC上的应用程序中使用了吸管工具,在那里你生成了图像?然后,您假设您在Android中使用的图像与您在PC上使用的图像相同。但是,这不是一个安全的假设。源位图的属性是什么,例如:分辨率,DPI等。然后看看Bitmap.decodeFile。线索是“解码”。默认情况下(因此有关位图属性的问题),Android不会简单地从文件说明符中读取位图并将其加载到内存中。例如,我不确定如果不深入研究源代码,也许decodeFile会抖动生成的位图。
您应该使用BitmapFactoryOptions来控制输入位图的解码方式:
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html