2011-01-05 4 views
4

長方形にビットマップを描画します。私は以下の値を使用します:drawBitmapMeshがアンドロイドキャンバスでどのように動作するのですか

this.meshWidth = 1; 
    this.meshHeight = 1; 
    this.verts = new float[8]; 
    this.points[0].x = (float)(this.getWidth()/4); 
    this.points[0].y = (float)(this.getHeight()/4); 
    this.points[1].x = (float)(this.points[0].x+this.getWidth()/2); 
    this.points[1].y = (float)(this.points[0].y); 
    this.points[2].x = (float)(this.points[0].x); 
    this.points[2].y = (float)(this.points[0].y+this.getHeight()/2); 
    this.points[3].x = (float)(this.points[1].x); 
    this.points[3].y = (float)(this.points[2].y); 

ポイント配列は私の頂点配列です。

私onDrawメソッド

public void onDraw(Canvas canvas){ 
    //canvas.drawBitmap(bitmap, 20,20, null); 
    Paint paint = new Paint(); 
    paint.setColor(Color.BLUE); 
    canvas.drawLine(this.points[0].x, this.points[0].y, this.points[1].x, this.points[1].y, paint); 
    canvas.drawLine(this.points[1].x, this.points[1].y, this.points[3].x, this.points[3].y, paint); 
    canvas.drawLine(this.points[3].x, this.points[3].y, this.points[2].x, this.points[2].y, paint); 
    canvas.drawLine(this.points[2].x, this.points[2].y, this.points[0].x, this.points[0].y, paint); 
    canvas.drawBitmapMesh(this.bitmap, meshWidth, meshHeight, verts, 0, null, 0, null); 
} 

出力はこの alt text

である私は青い線で囲まれた矩形のビットマップを描きたい...

答えて

2

あなたがやっているすべては、四角形を描画している場合メッシュをまったく使用する必要はありません。メッシュを使用する方が高価になります。

+0

私は知っているが、私は方法の背後にある論理を理解したい。 –

1

あなたは上のコードでvertsを初期化していません。あなたが実際に値をverts要素に割り当てるなら、それはあなたが望むことをしなければなりません(しかし、Romainが言ったように、それを達成する最良の方法ではありません)。

7

DrawBitmapMesh関数を理解するために必要なものはすべて、Androidデベロッパードキュメントに記載されています。 Android developer documentationを参照してください。

ただし、ここでは自分の言葉で説明します。関数の構文は次のとおりです。

public void drawBitmapMesh (Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint) 

ビットマップは、使用するビットマップです。今度は、画像の行に沿ったmeshWidth + 1点とビットマップの列の下のmeshHeight + 1点を持つビットマップ上のグリッドを想像してみましょう。これらの点または頂点をverts変数に指定します。これらは行優先形式で入力されます。つまり、行1では左から右へ、次に行2では左から右へ、頂点にはvertを入力します。つまり、4 x 4ポイントがあれば、このような:

* 01 * 02 * 03 * 04

* 05 * 06 * 07 * 08

* 09 * 10 * 11 * 12

* 13 * 14 * 15 * 16

ここで、* nは、ビットマップイメージ上に座標が適切に配置された頂点(x、y)です。あなたはビットマップ全体に均一にこれらのポイントを配布した場合、その後drawBitmapMeshは、理論的にはdrawBitmap関数と同じ出力を与えるだろう

vert[0] = (*01).x; 
vert[1] = (*01).y; 
vert[2] = (*02).x; 
vert[3] = (*02).y; 
... 

:あなたはあなたのようヴェール配列を定義します。しかし、これらの頂点を「自然な」位置からずらすと、drawBitmapMeshは仕様に従ってビットマップを伸ばし始めます。

例で行ったように、残りの関数引数をそれぞれ0、null、0、nullに設定できます。

関連する問題