0

android.graphics を取得できません。回転する画像オブジェクトですが、変換は問題ありません。次のコードにはカメラが含まれていません。

ダイナミック スプライトを作成し、描画プリミティブを android.graphicsに記録します。後で使用するための画像オブジェクトは、onDraw 中に個々のプリミティブ描画を行うよりも一貫して効率的です。また、Picture オブジェクトはビットマップに非常に似ており (同じではない場合)、ビットマップに保存したり、ビットマップから復元したりできます。

ただし、これらの写真を回転できるようにするために、recording() 後にビットマップとして保存する必要は避けたいと思います。つまり、ビットマップのような Picture オブジェクトを使用するだけで、キャンバス API は可能性を暗示しているようです。おそらく、Picture API はあまり洗練されていませんが、おそらく私のやり方が間違っているだけです。

ビットマップとピクチャのキャンバス API は並列ではありません。たとえば、次のようなものがあります。

    canvas.drawBitmap(bitmap_Sprite, matrix, null); // Draw sprite with matrix, no Paint

そして、次のとおりです。

    canvas.drawPicture(picture_Sprite, destination_rectangle); Draw sprite into rect.

しかし、ありません

    canvas.drawPicture(picture_Sprite, matrix ...)
  • 詳細

bitmap_Sprite と picture_Sprite の両方が、回転中に指している場所を示す「コンパス矢印」であると想像してください。

onDraw() 呼び出しでは、ビットマップ バージョンを使用すると、次のように動作します。

     matrix = new matrix();
     matrix.setRotate(angle);  // angle is ++ during onDraw(canvas)

     // Draw arrow, matrix rotates it as expected:
     canvas.drawBitmap(bitmap_Sprite, matrix, null); // null = no Paint obj

しかし、画像オブジェクトを使用して同じことを試みると、これを理解できる唯一の方法は、destination_rectangle (矢印を含む) を次のように回転させることでした。

     //destination_rectangle sized correctly to wrap previously recorded picture obj.
     matrix2 = new matrix();
     matrix2.setRotate(angle);  // angle is ++ during onDraw(canvas)

     matrix2.mapRect(destination_rectangle); // apply rotation
     canvas.drawPicture(picture_Sprite, destination_rectangle);

ただし、これが行うのは、ある場所を中心に四角形をピボットすることだけであり、四角形 (および矢印) 自体を回転させるわけではありません。

  • 質問:
    • 宛先矩形を使用しています。これを行う間違った方法?
    • Picture オブジェクトを使用して回転することはできますか?

確かに、Picture オブジェクトを回転させることができない場合は、以前に作成したビットマップ/ミップマップを直接使用できます。それで

  • 一般に、ピクチャ オブジェクトをビットマップと同じ方法で使用できると仮定すると、一度動的に作成されたピクチャを使用して、動的に作成し、ビットマップとして保存し、ビットマップを再ロードしてマトリックス処理を行うよりも、実際にオーバーヘッドを節約できますか?(! )
4

1 に答える 1