触れたポイントの色を取得するのに奇妙な問題があります。画像(.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でした。