recherche

Maison  >  Questions et réponses  >  le corps du texte

Android 图片涂鸦橡皮擦功能

最近在做一个画板功能,大致的不同颜色画笔、不同粗细已经实现。
参照的是该教程:android-drawing-app

现在要做的功能是,从相册或者相机导入图像,然后在上面涂涂画画,由于橡皮擦的功能其实是一个白色的paint来实现的。因此用了橡皮擦,底层的图像也被画上白色了。想要的效果是橡皮擦只对新画上去的线条有作用,并不影响导入的图像。

网上大致查找资料,好像可以使用两个图层来实现,导入的图像作为最底层,新画的线条在上一层,因此橡皮擦也不会影响到最底层的图像。

导入的图片(bitmap为导入的图片):

 drawCanvas.drawBitmap(bitmap, 0, 0, null);

橡皮擦功能:

public void setErase(boolean isErase) {
        this.isErase = isErase;
        if (isErase) {
            drawPaint.setColor(Color.WHITE);
//            drawPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
        } else {
            drawPaint.setColor(tempColor);
            drawPaint.setXfermode(null);
        }

请问如何设置两个图层,并让后续的线条只操作在第二个图层上?这里有点卡住了。或者有类似功能的demo吗?
十分感谢

PHP中文网PHP中文网2843 Il y a quelques jours1027

répondre à tous(1)je répondrai

  • 天蓬老师

    天蓬老师2017-04-17 17:26:19

    Puisque vous avez mentionné les calques, pourquoi ne pas dessiner l'image en calques ?
    1. Je peux créer des calques avec des vues qui se chevauchent, traiter les événements tactiles en calques et fusionner les données bitmap lors de l'exportation de l'image
    2 De même, je peux également utiliser une seule vue pour combiner les données d'image de chaque calque. sont tous enregistrés dans la liste. Lors du dessin, ils sont dessinés dans l'ordre et le calque supérieur est dessiné en dernier. Enfin, les données sont fusionnées lors de l'exportation de l'image

    .

    Le soi-disant traitement d'image est également une collection de données. Si vous souhaitez les traiter de manière hiérarchique, vous devez stocker chaque élément de données indépendamment dans une unité de stockage différente, de sorte que si vous modifiez les unités de données ultérieures, elles ne le seront pas. affecter les données précédentes. Avant moi, j'ai également réalisé une telle planche à dessin, mais je n'arrive pas à trouver l'exemple, mais c'est l'idée, je vous souhaite bonne chance

    répondre
    0
  • Annulerrépondre