2014-06-27 60 views
0

我在RelativeLayout內有兩個ImageView s。其中一個ImageView可拖動並可在其他ImageView上擴展。這一切都工作正常,除非我試圖將這些ImageView s導出到位圖並將其添加到畫布。將多個位圖導出爲一張圖片

我不能找出如何計算的規模和拖動視圖/位圖B.

ImageView甲用作背景的位置。
ImageView B爲可拖動和可擴展的上ImageView A.

enter image description here

這裏的頂部是一個代碼示例

public static Bitmap MergeBitmaps(View v, View ViewA, Bitmap bitmapA, View viewB, Bitmap bitmapB) { 
    Bitmap b = Bitmap.createBitmap(
      bitmapA.getWidth(), bitmapA.getHeight(), Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(b); 

    float scaleFactor = (float) ViewA.getHeight()/(float) bitmapA.getHeight(); 
    float scaleFactorWidth = (float) ViewA.getWidth()/(float)bitmapA.getWidth(); 

    int test2[] = new int[2]; 
    viewB.getLocationOnScreen(test2); 

    //Rect rect1 = new Rect(); 
    //selectedImg.getDrawingRect(rect1); 

    //Rect rect2 = new Rect(); 
    //logo.getDrawingRect(rect2); 
    //int logoHeight = logo.getHeight(); 
    //int logoWidth = logo.getWidth(); 

    //int logoLeft = logo.getLeft(); 
    //int selectedImgLeft = selectedImg.getLeft(); 
    float scaleFactorMid = (scaleFactor + scaleFactorWidth)/2; 


    c.drawBitmap(bitmapA, 0, 0, null); 
    //c.drawBitmap(logoBitmap, test2[0]*scaleFactorWidth, test2[1]*scaleFactor, null); 
    bitmapB = getResizedBitmap(bitmapB, (int)(bitmapB.getHeight()*scaleFactorMid), (int)(bitmapB.getWidth()*scaleFactorMid)); 
    c.drawBitmap(bitmapB, bitmapA.getWidth()/2, bitmapA.getHeight()/2, null); 
    //v.layout(0, 0, v.getWidth(), v.getHeight()); 

    //selectedImg.draw(c); 
    return b; 
} 

我試圖通過將視圖的寬度/高度和所述計算所述比例因子Bitmap s寬度/高度。

我嘗試了很多,你可以看到。任何人都可以將我指向正確的方向嗎?

回答

0

以下爲您的參考功能是有幫助的,(在此靜態縮放位圖中,您可以移動代碼)。

public void mergeTwoBitmap() { 
    ImageView iv1 = (ImageView) findViewById(R.id.imageView1); 
    ImageView iv2 = (ImageView) findViewById(R.id.imageView2); 
    Bitmap bitmap1 = ((BitmapDrawable) iv1.getDrawable()).getBitmap(); 
    Bitmap bitmap2 = ((BitmapDrawable) iv2.getDrawable()).getBitmap(); 

    float img2X = iv2.getX(), img2Y = iv2.getY(); 
    float img2Width = bitmap2.getWidth(), img2Height = bitmap2.getHeight(); // Original Width And Height 

    bitmap2 = Bitmap.createScaledBitmap(bitmap2, 300, 300, true); 

    float img2NewX, img2NewY; 
    img2NewX = img2X + (img2Width - bitmap2.getWidth()) * 0.5f; // here bitmap2.getWidth() after scale bitmap1 
    img2NewY = img2Y + (img2Height - bitmap2.getHeight()) * 0.5f; // here bitmap2.getHeight() after scale bitmap2 

    Bitmap b = mergeBitmap(iv1.getWidth(), iv1.getHeight(), bitmap1, 
      bitmap2, img2NewX, img2NewY); 
} 


private Bitmap mergeBitmap(float w, float h, Bitmap bmp1, Bitmap bmp2, 
     float x, float y) { 
    Bitmap cs = null; 
    int width = (int) w, height = (int) h; 
    cs = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas comboImage = new Canvas(cs); 
    comboImage.drawBitmap(
      Bitmap.createScaledBitmap(bmp1, width, height, true), 0f, 0f, 
      null); 
    comboImage.drawBitmap(bmp2, x, y, null); 
    return cs; 
} 
+0

當我刪除img2NewX和img2newY的乘法0.5f時它工作(合併,不縮放)。當我保持原樣或更改兩個值時,位圖B的位置不正確。你確定這是我應該擴展的地方嗎? –

相關問題