Как стереть краску пальцем на картинке? - PullRequest
1 голос
/ 25 августа 2011

Может ли любое тело сказать мне стереть краску на изображении, в моем приложении я подготовил рисование пальцем на изображении, если я хочу стереть краску, оно получает черный цвет на изображении вместо стирания изображения.мой код

    public class MyView extends View {
    int bh = originalBitmap.getHeight();
    int bw = originalBitmap.getWidth();
    public MyView(Context c)  {
        super(c);
        //mBitmap = Bitmap.createScaledBitmap(originalBitmap,bw,bh,true);
        mBitmap = Bitmap.createBitmap(bw,bh,Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mBitmap);
        mPath = new Path();
        mBitmapPaint = new Paint(Paint.DITHER_FLAG);
        mBitmapPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
    }
    public MyView (Context c, int color)  {  
        super(c);

        mBitmap = Bitmap.createScaledBitmap(originalBitmap,bw,bh,true);
        mCanvas = new Canvas(mBitmap);
        mPath = new Path();
        mBitmapPaint = new Paint(Paint.DITHER_FLAG);
        mBitmapPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)) ;
        mCanvas.drawColor(color);
    } 
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);           
            /*mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            mCanvas = new Canvas(mBitmap);*/
    }
    @Override 
    protected void onDraw(Canvas canvas) {   
        canvas.drawColor(Color.TRANSPARENT);
        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        canvas.drawPath(mPath, mPaint);
    }

для стирания краски

 mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

Ответы [ 2 ]

6 голосов
/ 25 августа 2011

Вы должны рисовать на прозрачном настраиваемом виде, помещенном поверх исходного растрового изображения, вместо изменения оригинала.Это будет проще.Для этого вы можете сделать

<RelativeLayout ....>
      <ImageView ......set original bitmap to this/>
      <CustomView ...... draw on this, you can erase too./>
</RelativeLayout>

. Для получения измененного растрового изображения вызовите метод getDrawingCache() для этого RelativeLayout.Это даст вам объединенное растровое изображение.

Надеюсь, это поможет.

0 голосов
/ 15 мая 2014

определите временное растровое изображение и холст, затем нарисуйте холст на этом временном растровом изображении и передайте это растровое изображение в onDraw, ваша работа будет выполнена,

...