0

キャンバス上でビットマップを回転させるのに問題があります。canvas.drawline を使用してキャンバス上にビットマップを描画し、次のコードを使用して画像を回転させています。

回転しますが、現在2つの画像が表示されています?キャンバスから前の画像を削除するには? 何をすべきか?

bitmap = Bitmap.createBitmap((int) /*getWindowManager()
                        .getDefaultDisplay().getWidth()*/600, (int) /*getWindowManager()
                        .getDefaultDisplay().getHeight()*/600, Bitmap.Config.ARGB_8888 );
             Canvas canvas = new Canvas(bitmap);
             drawingImageView.setVisibility(View.VISIBLE);

               drawingImageView.setImageBitmap(bitmap);

              // canvas.rotate(90);
                   for(int i=0;i<SettingsStaticData.arrX1_crossPoint.size();i++)
                   {

                       canvas.drawLine(new Float(SettingsStaticData.arrX1_crossPoint.get(i)),new Float(SettingsStaticData.arrY1_crossPoint.get(i)),new Float(SettingsStaticData.arrX2_crossPoint.get(i)) ,new Float(SettingsStaticData.arrY2_crossPoint.get(i)), paint);


                   }


                    paint.setStrokeWidth((float) 0.9);
                   paint.setStyle(Paint.Style.FILL);
                 //  paint.setColor(Color.RED);

                   paint.setColor(Color.parseColor("#800080"));
               for(int i=0;i<arrXX.size()-1;i++)
                {

                  if(i==arrXX.size()-2)
                  {
                      canvas.drawLine(new Float(arrXX.get(0)),new Float(arrYY.get(0)),new Float(arrXX.get(i+1)) ,new Float(arrYY.get(i+1)), paint);
                      canvas.drawLine(new Float(arrXX.get(i)),new Float(arrYY.get(i)),new Float(arrXX.get(i+1)) ,new Float(arrYY.get(i+1)), paint);

                  }
                  else
                  {
                      canvas.drawLine(new Float(arrXX.get(i)),new Float(arrYY.get(i)),new Float(arrXX.get(i+1)) ,new Float(arrYY.get(i+1)), paint);

                  }
                }


        //     canvas.drawColor(0, Mode.CLEAR);
               Matrix matrix = new Matrix();

                  matrix.reset();
               matrix.postTranslate(-bitmap.getWidth() / 2-500, -bitmap.getHeight() / 2-500); // Centers image
               matrix.postRotate(180);
              //matrix.postTranslate(px, py);


               canvas.drawBitmap(bitmap, matrix, null);
4

1 に答える 1

2

問題は最後の行です:canvas.drawBitmap(bitmap, matrix, null);

canvasで初期化されるbitmapので、それ自体にビットマップを描画します(いくつかの変更があります)。

別の行を作成しCanvas canvas2、最後の行をに変更して最後の行をcanvas2.drawBitmap(bitmap, matrix, null); 表示しdrawingImageView.setImageBitmap(bitmap2);ます。ここで、bitmap2はcanvas2の作成に使用されるビットマップです。

したがって、明示的に:

bitmap = Bitmap.createBitmap((int) /*getWindowManager()
            .getDefaultDisplay().getWidth()*/600, (int) /*getWindowManager()
            .getDefaultDisplay().getHeight()*/600, Bitmap.Config.ARGB_8888 );
bitmapFinal = Bitmap.createBitmap((int) /*getWindowManager()
            .getDefaultDisplay().getWidth()*/600, (int) /*getWindowManager()
            .getDefaultDisplay().getHeight()*/600, Bitmap.Config.ARGB_8888 );

    Canvas canvas = new Canvas(bitmap);
    // canvas.rotate(90);
    for(int i=0;i<SettingsStaticData.arrX1_crossPoint.size();i++){
        canvas.drawLine(new Float(SettingsStaticData.arrX1_crossPoint.get(i)),
                new Float(SettingsStaticData.arrY1_crossPoint.get(i)),
                new Float(SettingsStaticData.arrX2_crossPoint.get(i)) ,
                new Float(SettingsStaticData.arrY2_crossPoint.get(i)), paint);
    }

    paint.setStrokeWidth((float) 0.9);
    paint.setStyle(Paint.Style.FILL);
    //  paint.setColor(Color.RED);

    paint.setColor(Color.parseColor("#800080"));
    for(int i=0;i<arrXX.size()-1;i++){

        if(i==arrXX.size()-2){
            canvas.drawLine(new Float(arrXX.get(0)),new Float(arrYY.get(0)),
                    new Float(arrXX.get(i+1)) ,new Float(arrYY.get(i+1)), paint);
            canvas.drawLine(new Float(arrXX.get(i)),new Float(arrYY.get(i)),
                    new Float(arrXX.get(i+1)) ,new Float(arrYY.get(i+1)), paint);

        }else{
            canvas.drawLine(new Float(arrXX.get(i)),new Float(arrYY.get(i)),new Float(arrXX.get(i+1)) ,new Float(arrYY.get(i+1)), paint);
        }
    }
    //     canvas.drawColor(0, Mode.CLEAR);
    Matrix matrix = new Matrix();
    matrix.reset();
    matrix.postTranslate(-bitmap.getWidth() / 2-500, -bitmap.getHeight() / 2-500); // Centers image
    matrix.postRotate(180);
    //matrix.postTranslate(px, py);

    Canvas canvas2 = new Canvas(bitmapFinal);
    canvas2.drawBitmap(bitmap, matrix, null);
    drawingImageView.setVisibility(View.VISIBLE);
    drawingImageView.setImageBitmap(bitmapFinal);

また、私のアドバイスは、ビットマップを作成するためのより良い場所を探すことです-毎回新しいビットマップを作成する必要はありません-一度作成して再利用する必要があります(ビットマップを継続的に作成するにはコストがかかります)。私はonCreate()この目的のために機能を推測します。

于 2012-10-02T13:17:13.897 に答える