如何获得画布像素(How to get canvas pixel)

2019-08-03 03:58发布

我有我画线画布:

//see code upd

我需要做的吸管工具,将颜色从我的画布。 我怎么可能做到吗?


代码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;
        }
    }

我只看到“像素” - “ffaaaaaa”,或者如果我使用mCanvas.drawColor(Color.GRAY)“像素” - “ff888888”

Answer 1:

画布无非是一种容器,其持有绘制呼叫处理位图更多。 因此,不存在“从画布颜色取”的概念。

相反,你应该检查视图,您可以用得到的位图的像素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);



Answer 2:

以上回答返回我的空白位图。 这是我的解决办法

@Override
protected void onDraw(Canvas canvas) {
    ...
    bitmapUpdated = true;
}

然后对得到的位图

public Bitmap getBitmapImage() {
    if (bitmapUpdated) {
        this.buildDrawingCache();
        bitmapImage = Bitmap.createBitmap(this.getDrawingCache());
        this.destroyDrawingCache();
    }
    return bitmapImage;
}

这工作对我很好,没有过多的开销。

也许是更好的解决方案将覆盖无效()和的onDraw(),所以它使用你的画布,与您联系的位图

Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.draw(c);
return b;


文章来源: How to get canvas pixel