0

こんにちは、画像ビューに触れたときにピクセルの色を取得したいのですが、xml の画像ビューの幅と高さがラップ コンテンツの場合、このコードは正常に動作します。

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight=".2"
        android:orientation="vertical" 
        android:gravity="center">

        <ImageView
            android:id="@+id/iv_cam"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher" >
        </ImageView>
    </LinearLayout>

、xmlファイルで画像ビューのラップコンテンツの幅と高さを親と一致するように設定すると問題が発生します

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight=".2"
        android:orientation="vertical" 
        android:gravity="center">

        <ImageView
            android:id="@+id/iv_cam"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/ic_launcher" >
        </ImageView>
    </LinearLayout>

これを行うと、小さな画像がストレッチ エラーになります E/MessageQueue-JNI(1006): java.lang.IllegalArgumentException: x must be < bitmap.width()

どうすればこれを解決できますか...

@Override public boolean onTouch(View v, MotionEvent event) {

    if(event.getAction() == MotionEvent.ACTION_DOWN){           

    ImageView iv = ((ImageView)v);      
    Bitmap bmp = ((BitmapDrawable)iv.getDrawable()).getBitmap();

    int pixel = bmp.getPixel((int)event.getX(),(int)event.getY());// error comes in this line
    int alphaValue = Color.alpha(pixel);
    int redValue = Color.red(pixel);
    int blueValue = Color.blue(pixel);
    int greenValue = Color.green(pixel);

    Toast.makeText(this,"[" +alphaValue+"," +redValue+","+greenValue+","+blueValue+"]", Toast.LENGTH_LONG).show();

    }

    return false;
}
4

2 に答える 2

0

古い質問であることは知っていますが、まだ関連している可能性があります。私が知る限り、ビットマップは、イベントの getPixel() で取得したものとは異なるピクセルを参照しています。私がしたことは、これらのピクセルを次のようにオフセットすることです。

    Bitmap bmp = Bitmap.createBitmap(img.getDrawingCache());
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width = size.x;
    int height = size.y;        
    int [] imgCenter = new int[2];
    img.getLocationOnScreen(imgCenter);
    int x = evX - imgCenter[0];  // These are your desired coordinates
    int y = evY - imgCenter[1];  // evX & evY are the event's coordinates 
于 2015-05-23T12:11:18.620 に答える
0

ビットマップ自体に対してビットマップの寸法を確認する必要があります。

if ((bmp.getHeight() < (int)event.getY() || (bmp.getWidth() < (int)event.getX() ) {
// not within range
}
于 2013-08-22T19:07:15.587 に答える