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 に答える