Как стереть краску пальцем на изображении?

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

    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));

person RajaReddy PolamReddy    schedule 25.08.2011    source источник
comment
Вы хотите, чтобы ластик работал так же, как Eraser в msPaint в ОС Windows?   -  person Niranj Patel    schedule 25.08.2011
comment
см. это: dl.dropbox.com/u/38493970/Image-4724.jpg я хочу стереть только красный цвет на изображении, а не стирать красный, он становится черным.   -  person RajaReddy PolamReddy    schedule 25.08.2011
comment
Как вы стираете цвет. на каком мероприятии?   -  person Ronnie    schedule 25.08.2011
comment
в коде, имеющем кнопку меню (изменение цвета, стирание), когда я не хочу стирать (нажмите кнопку стирания), я войду в стирание, используя палец, это будет стирание, вместо стирания он показывает черный цвет (я думаю, что он также стирает фоновое изображение) .   -  person RajaReddy PolamReddy    schedule 25.08.2011
comment
У меня есть вид, на котором я рисую, используя цвета diff-2, но когда я выбираю ластик, он устанавливает затронутую область в черный цвет. это так в 2.3 андроида. Было бы ценно, если бы вы мне помогли.   -  person skygeek    schedule 11.04.2013


Ответы (2)


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

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

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

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

person Ronnie    schedule 25.08.2011
comment
Подскажите, пожалуйста, как это сделать, я новичок в этом. - person RajaReddy PolamReddy; 25.08.2011
comment
во время рисования на эмуляторе все в порядке, проблема после сохранения. несоответствие окраски. - person RajaReddy PolamReddy; 25.08.2011
comment
У вас есть возможность прокрутки и рисования для изображения? Загрузите изображение по размеру экрана. - person Ronnie; 25.08.2011
comment
для изображения у меня есть OnTouchListener(); в этом Zoom, панорамирование, перетаскивание. - person RajaReddy PolamReddy; 25.08.2011
comment
Вы можете добавить это как еще один вопрос.. Поскольку исходный вопрос решен. - person Ronnie; 25.08.2011
comment
У меня была такая же проблема. Я попробовал прозрачный холст, но не могу заставить функцию ластика работать таким образом. Если бы вы смогли заставить это работать, не могли бы вы поделиться своим кодом о том, как вы это сделали? - person Chris; 15.11.2012
comment
@Anshuman .. Я не писал для этого код. Это единственная концепция, о которой я знаю. - person Ronnie; 04.03.2013

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

person Sulaiman Khan    schedule 15.05.2014