2 years ago

#73189

test-img

Developer

flutter painting on canvas and erase drawing

i am working on a canvas drawing module in to it i need to erase user drawing

basic funda is

  1. adding image in canvas
  2. user can draw on image using pencil (i.e black color) now user can erase this black color on erase function (i.e clear user drawing )

my try is :

case PaintMode.eraser:
              print('eraser**** _image Painter!!!*'); // print(_painter.color)
              //  canvas.saveLayer(Offset.zero & size, Paint());1
              var _painterTemp = _painter!
                // ..color = Colors.transparent.withOpacity(0.8)//also tried it
                ..strokeCap = StrokeCap.round
                ..blendMode = BlendMode.clear;
    
              for (var i = 0; i < _offset!.length - 1; i++) {
                if (_offset[i] != null && _offset[i + 1] != null) {
                  final _path = Path()
                    ..moveTo(_offset[i]!.dx, _offset[i]!.dy)
                    ..lineTo(_offset[i + 1]!.dx, _offset[i + 1]!.dy);
                
                } else if (_offset[i] != null && _offset[i + 1] == null) {
                 
                  canvas.drawPoints(PointMode.points, [_offset[i]!], _painterTemp);
                }
              }
              //   canvas.restore();//1
    
              break

but i am getting black lines only

took reference from https://github.com/yellowQ-software/yellowQ-Flutter-Image-Painter

edit----- i've edited like

case PaintMode.eraser:
          print('eraser**** _image Painter!!!*');

       
          var _painterTemp = _painter!
            ..color = Colors.transparent
            ..blendMode = BlendMode.clear; //srcOver

          for (var i = 0; i < _offset!.length - 1; i++) {
            if (_offset[i] != null && _offset[i + 1] != null) {
              final _path = Path()
                ..moveTo(_offset[i]!.dx, _offset[i]!.dy)
                ..lineTo(_offset[i + 1]!.dx, _offset[i + 1]!.dy);

              canvas.drawPath(_path, _painter);

              canvas.drawPath(_path, _painterTemp);
              canvas.saveLayer(Offset.zero & size, Paint());
            } else if (_offset[i] != null && _offset[i + 1] == null) {
              canvas.drawPoints(PointMode.points, [_offset[i]!], _painter);
              canvas.drawPoints(PointMode.points, [_offset[i]!], _painterTemp);
            }
            //  canvas.saveLayer(Offset.zero & size, Paint()); //1
          }
          //   canvas.restore();//1

          break;

but not working but getting custom painter called canvas.save() or canvas.saveLayer() at least 773 more times than it called canvas.restore().

any help?

flutter

canvas

drawing

eraser

0 Answers

Your Answer

Accepted video resources