将多个位图导出到一张图片

时间:2014-06-27 13:47:34

标签: android bitmap

我在ImageView内有两个RelativeLayout。一个ImageView可以在另一个ImageView上进行拖放和扩展。这一切都正常,除非我尝试将这些ImageView导出到位图并将其添加到画布。

我无法弄清楚如何计算视图/位图B的比例和拖动位置。

ImageView A作为背景 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的宽度/高度来计算比例因子。

我已经尝试了很多,你可以看到。有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分: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;
}