0

好吧,canvas.draw()我有多个帧要覆盖在同一个位图上的问题。我成功地做到了这一点。但问题是现在使用相同的方法但不同的边框应用另一个框架时,边框会覆盖旧的边框。

    void hm(){
    Bitmap border = BitmapFactory.decodeResource(getResources(), R.drawable.vignette2);
    int width = bmp.getWidth();
    int height = bmp.getHeight();
    change = Bitmap.createScaledBitmap(change, width, height, false);
    Canvas canvas = new Canvas(change);
    Bitmap scaledBorder = Bitmap.createScaledBitmap(border,width,height, false);
    canvas.drawBitmap(scaledBorder, 0, 0,null);
    //canvas.drawBitmap(k, 0, 0, null);
    view.setImageBitmap(change);
    }

这是另一种方法:

    void hm1(){
    Bitmap border = BitmapFactory.decodeResource(getResources(), R.drawable.white);
    int width = bmp.getWidth();
    int height = bmp.getHeight();
    change = Bitmap.createScaledBitmap(change, width, height, false);
    Canvas canvas = new Canvas(change);
    Bitmap scaledBorder = Bitmap.createScaledBitmap(border,width,height, false);
    canvas.drawBitmap(scaledBorder, 0, 0,null);
    //canvas.drawBitmap(k, 0, 0, null);
    view.setImageBitmap(change);
    } 

现在,当我单击button1叠加层时,将应用于视图。当我单击它时,button2它也适用于视图,但它不会破坏旧边框(“叠加图像”)。我知道我应该使用不同的位图来处理 imageview 的每个视图。但我正在使用保存按钮,它将保存Bitmap change这意味着我想在此图像上应用边框并显示它。不覆盖旧边界。
例如,我正在使用QuickAction,这就是我尝试完成点击的方式。

                if (actionId == border0){
                hm();
                } 

             if (actionId == border1 ){
                 hm1();
                } 

              if (actionId == border2 ){
              }

它有效,但正如我所说,它覆盖了旧的。任何帮助将不胜感激。提前致谢。明天解决它,我将发布答案:)。

4

1 回答 1

2

好吧,您使用以下行在旧位图的基础上创建一个新位图:

change = Bitmap.createScaledBitmap(change, width, height, false);

因此,请确保您以某种方式将位图重置change为原始位图:

change = Bitmap.createScaledBitmap(originalBitmap, width, height, false);
于 2013-01-29T09:30:28.637 回答