5

線を引くキャンバスがあります。

//see code upd

キャンバスから色を取得するピペットツールを作成する必要があります。どうすれば作れますか?


コードの更新:

private static class DrawView extends View 
{
        ...
        public DrawView(Context context) {
            super(context);
            setFocusable(true);

            mBitmap = Bitmap.createBitmap(640, 860, Bitmap.Config.ARGB_8888);
            mCanvas = new Canvas(mBitmap);
            mPath = new Path();
            mBitmapPaint = new Paint(Paint.DITHER_FLAG);

            this.setDrawingCacheEnabled(true);
        }

        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(0xFFAAAAAA);
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
            canvas.drawPath(mPath, mPaint);
        }
        private void touch_up()
        {
            if(!drBool) //is true when I click pipette button
            {
                ...
                mCanvas.drawPath(mPath, mPaint); // lines draw
                mPath.reset();
            }else{
                this.buildDrawingCache();
                cBitmap = this.getDrawingCache(true);
                if(cBitmap != null)
                {
                    int clr = cBitmap.getPixel((int)x, (int)y);
                    Log.v("pixel", Integer.toHexString(clr));
                    mPaint.setColor(clr);
                }else{
                    Log.v("pixel", "null");
                }
            }
            drBool = false;
        }
    }

「pixel」-「ffaaaaaa」、またはmCanvas.drawColor(Color.GRAY)「pixel」-「ff888888」を使用した場合のみ表示されます

4

2 に答える 2

13

キャンバスは、ビットマップを操作するための描画呼び出しを保持するコンテナーにすぎません。だから「キャンバスから色を取る」という概念はありません。

代わりに、 で取得できるビューのビットマップのピクセルを調べる必要がありますgetDrawingCache

ビューのコンストラクターで:

this.setDrawingCacheEnabled(true);

ピクセルの色が必要な場合:

this.buildDrawingCache();
this.getDrawingCache(true).getPixel(x,y);

これは非常に非効率的です。これを何度も呼び出す場合は、ビットマップ フィールドを追加し、getDrawingCache() を使用して ondraw() に設定することをお勧めします。

private Bitmap bitmap;

...

onDraw()

  ...

  bitmap = this.getDrawingCache(true);

次に使用しますbitmap.getPixel(x,y);

于 2012-11-25T12:00:50.257 に答える