2012-01-09 10 views
0

2つの画像を1つにまとめる必要があります。基本的に私がする必要があるのは、イメージの中心にあるものの上にそれらの1つを重ねることだけです。これはすべての主要なAndroid端末で動作する必要があります。Androidビットマップ変換数学

、私は多くのことを試してみましたが、ここに私のコードスニペットは、今のようである(はい、私はそれが台無しだ知っている、私たちはdelxとDELYを把握する必要があります):

/* Rotate our original photo */ 
// final float scale = getResources().getDisplayMetrics().density; 
    canvas.drawBitmap(bmp, 0f, 0f, null); 
    final float overlay_scale_factor = .5f; 
    final int overlaywidth = (int)(overlay.getWidth() * overlay_scale_factor); 
    final int overlayheight = (int)(overlay.getHeight() * overlay_scale_factor); 
    final int delx = overlaywidth; 
    final int dely = overlayheight; 
    Matrix mat = new Matrix(); 
    mat.postRotate(270); 
    mat.postScale(overlay_scale_factor, overlay_scale_factor); 
    //mat.postTranslate(-delx, -dely); 
    canvas.drawBitmap(overlay, mat, null); 
    /* Bottom image 'composite' is now a composite of the two. */ 

すべてのヘルプ感謝しています。私はこれがちょうど数学であることを知っていますが、私はこの種のものでは良くありません。

最初の画像 'bmp'はキャンバスのサイズの100%です。 2番目のイメージ 'overlay'は、270度回転した後に中央に配置する必要があるオーバーレイです。

答えて

4

完全にテストされていないが、私はこのような何かが動作することを期待したい:作品

// Set the origin (0,0) in the middle of the view 
canvas.translate(width/2, height/2); 

// Draw the first bitmap so it is centered at (0,0) 
canvas.drawBitmap(bmp, -bmp.getWidth()/2, -bmp.getHeight()/2, null); 

// Rotate & scale 
canvas.save(); 
canvas.rotate(270); 
canvas.scale(.5f); 

// Draw the overlay 
canvas.drawBitmap(overlay, -overlay.getWidth()/2, -overlay.getHeight()/2, null); 
canvas.restore(); 
+0

。本当にありがとう!私はそのキャンバスを見逃していました。最初は翻訳して、複雑なものにしました。 – Peanut