web-dev-qa-db-ja.com

メソッド-canvas.drawBitmap(bitmap、src、dst、Paint)を使用する

このコードを使用するたびに何も描画されません。指定した四角形の内部にビットマップを描画する必要があります。

canvas.drawBitmap(MyBitmap, null, rectangle, null)

オンラインで調べましたが、あまり助けが見つかりません。

21
Kohler Fryer

[〜#〜] edit [〜#〜]


元の答えは間違っています。 sourceRectを使用して、描画するビットマップの一部を指定できます。 nullの場合があり、その場合は画像全体が使用されます。

フライヤーのコメントによると、彼は何かの下に絵を描いていました。

drawBitmap(bitmap, srcRect, destRect, Paint)はZ ordering (depth)を処理せず、オブジェクトでdrawを呼び出す順序が重要です。

正方形、三角形、円の3つの図形を描画する場合。正方形を一番上にしたい場合は、最後に描画する必要があります。


ソースが指定されていないため、何も描画されません。

例:

ビットマップ100x100ピクセルがあります。ビットマップ全体を描画する必要があります。

canvas.drawBitmap(MyBitmap, new Rect(0,0,100,100), rectangle, null);

ビットマップの左半分のみを描画します。

canvas.drawBitmap(MyBitmap, new Rect(0,0,50,100), rectangle, null);

ソース矩形を指定する必要があります。ソース矩形は、0,0からビットマップの幅、高さまでの任意の長方形にすることができます。

32
triggs

Rectを定義するときに覚えておくべき主な項目は次のとおりです。

  • 左<右 そして 上<下

四角形は画面座標にあります(正のYは下向き)...

Rectの引数を考えると便利です

(left, top, right, bottom)

なので

(X, Y, X + Width, Y + Height)

ここで、X、Yはスプライト画像の左上隅です。

注:特定の場所に画像を中央に配置する場合は、それらの値をスプライトの幅と高さの半分だけオフセットすることを忘れないでください。例えば:

int halfWidth = Width/2;
int halfHeight = Height/2
Rect dstRectForRender = new Rect( X - halfWidth, Y - halfHeight, X + halfWidth, Y + halfHeight );
canvas.drawBitmap ( someBitmap, null, dstRectForRender, null );

これは元の画像全体を使用し(src rectはnullであるため)、dstRectForRender ...からのサイズと位置に合わせてスケーリングし、デフォルトのPaintを使用します。

23
DevByStarlight

なぜかわからないが、これは私のために働いた!

Rect rectangle = new Rect(0,0,100,100);
canvas.drawBitmap(bitmap, null, rectangle, null);

ありがとう:)

1
Device