2

私はAndroidアプリケーションを書いています。それを使用すると、ユーザーはビットマップ画像をトリミングできます。しかし、トリミングする前に画像を回転させる機能を追加したいと思います。この目的を達成するために、以下の手順に従いました。

  1. カスタム ビューを作成しました。
  2. 初期化BitmapDrawable()され、クロッピングの四角形( Rect()) [四角形は、ビットマップ内のどこをコピーするかを決定します]
  3. 2 つの関数のオーバーライドonTouch(MotionEvent)メソッド
    • を。ユーザーは画面上でビットマップを移動できます
    • b. ユーザーはトリミング四角形を変換できます
  4. onDraw(Canvas)画面を更新するメソッドをオーバーライドします。このコードはビットマップを表示するためのものです。

    bitmap_drawable.draw(canvas,_bitmap_paint);
    
  5. 問題:1

    やり方がわからないこのステップは、適切に回転したものを表示することです。このコードを使用して、onDraw(Canvas)メソッドでキャンバスを回転させました。

    canvas.rotate(_angle);
    

    ただし、画面上のすべてのもの (切り取り四角形を含む) が回転します。

    質問2

    Canvas()ビットマップを描画するために自分のオブジェクトを初期化するのは賢明な方法ですか?

    ノート:

    ここで、私が望む回転は 1 度まで非常に正確で、2 本指の回転ジェスチャによって実行されるため、パフォーマンスが非常に重要であり、次のコード (マトリックスを使用) は悪いです。

    Matrix mat = new Matrix();
    
    mat.preRotate(_degree, _one_finger_x, _one_finger_y);
    
    Bitmap _new_bitmap = Bitmap.createBitmap(_old_bitmap, 0, 0, bmWidth, bmHeight, mat, true);
    

    Canvas()したがって、セパレートを初期化して使用することcanvas.rotate(_degree)は非常に適切だと思います。ただし、これにより、タッチ イベントの制御が非常に難しくなります。何かアイデアがあれば教えてください。

  6. 問題:2

    ビットマップをすべてのオブジェクト (切り取り四角形など) とは別に回転できるとします。この手順では、ビットマップを切り取り、切り取り結果をユーザーに効率的に表示します。回転機能が含まれていない場合は、単純にカラー バイトをコピーします。次のように、古いビットマップのトリミング四角形内。

    Bitmap _new_bitmap = Bitmap.createBitmap( _old_bitmap, _cropRectx, _cropRecty, _cropRectWidth, _cropRectHeight, null);
    

    しかし、ここでは、回転したビットマップから、クロッシング クロップの四角形を介してカラー バイトを複製するにはどうすればよいでしょうか。

    質問2

    回転したビットマップをトリミングするにはどうすればよいですか?

4

0 に答える 0