在Android中合并两个位图 [英] Merge two bitmaps in android

查看:161
本文介绍了在Android中合并两个位图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想合并两个位图,这里是我的代码

  //相机arg转换为Bitmap 
位图cameraBitmap = BitmapFactory.decodeByteArray(arg0,0,
arg0.length);
Bitmap back = Bitmap.createBitmap(cameraBitmap.getWidth(),
cameraBitmap.getHeight(),Bitmap.Config.ARGB_8888);
Canvas cam = new Canvas(back);
cam.drawBitmap(cameraBitmap,matrix,null);


// FrameLayout to Bitmap
FrameLayout mainLayout =(FrameLayout)findViewById(R.id.frame);
Bitmap foreground = Bitmap.createBitmap(mainLayout.getWidth(),
mainLayout.getHeight(),Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(foreground);
mainLayout.draw(c);

Bitmap cs = null;
cs = Bitmap.createBitmap(foreground.getWidth(),cameraBitmap.getHeight(),Bitmap.Config.ARGB_8888)

Canvas comboImage = new Canvas(cs);
comboImage.drawBitmap(cameraBitmap,0f,0f,null);
comboImage.drawBitmap(foreground,0f,cameraBitmap.getHeight(),null);

FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
if(fos!= null){
cs.compress(Bitmap.CompressFormat.PNG,90,fos);
fos.close();
}
} catch(Exception e){
e.printStackTrace();
}

相机图像应为背景,前景为顶部图像。我试过从
在Android使用Canvas组合2图片,但它没有帮助我。任何想法。?感谢

解决方案

在您的示例中,您忘记添加以下行:

  comboImage.drawBitmap(c,0f,0f,null); 
comboImage.drawBitmap(s,0f,c.getHeight(),null);

在上面的例子中,你不会在画布上绘制你的图像,这是问题。
你可以认为你的画布我的写生。现在你没有画任何东西,你问自己,我看不到任何颜色。



所以,我的建议,首先创建两个位图,然后,做下一件事:

  c.drawBitmap(cameraBitmap,top point,left point,null); 
c.drawBitmap(foreground,top point,left point,null);

您也可以通过首先从位图创建drawable对象,

 可绘制cameraBitmap = BitmapDrawable(cameraBitmap); 
Drawable foreground = BitmapDrawable(foreground);

然后当你有drawable对象时,你可以设置边界,您想显示该图片。

  cameraBitmap.setBounds(left,top,right,bottom) 
foreground.setBounds(left,top,right,bottom);

,最后在画布上绘制:

  cameraBitmap.draw(canvas); 
foreground.draw(canvas);



编辑



这是一个例子,用这个来理解你的实现:

  Bitmap bitmap = null; 
try {

bitmap = Bitmap.createBitmap(500,500,Config.ARGB_8888);
Canvas c = new Canvas(bitmap);
resources res = getResources();


位图bitmap1 = BitmapFactory.decodeResource(res,R.drawable.test1); // blue

Bitmap bitmap2 = BitmapFactory.decodeResource(res,R.drawable.test2); // green
Drawable drawable1 = new BitmapDrawable(bitmap1);
Drawable drawable2 = new BitmapDrawable(bitmap2);


drawable1.setBounds(100,100,400,400);
drawable2.setBounds(150,150,350,350);
drawable1.draw(c);
drawable2.draw(c);


} catch(Exception e){
}
return bitmap;

这是我从上面的代码中得到的:



>


I want to merge two bitmaps, here is my code

// Camera arg conversion to Bitmap
                    Bitmap cameraBitmap = BitmapFactory.decodeByteArray(arg0, 0,
                            arg0.length);
                    Bitmap back = Bitmap.createBitmap(cameraBitmap.getWidth(),
                        cameraBitmap.getHeight(), Bitmap.Config.ARGB_8888);
                    Canvas cam = new Canvas(back);
                    cam.drawBitmap(cameraBitmap, matrix, null);


                    // FrameLayout to Bitmap
                    FrameLayout mainLayout = (FrameLayout) findViewById(R.id.frame);
                    Bitmap foreground = Bitmap.createBitmap(mainLayout.getWidth(),
                            mainLayout.getHeight(), Bitmap.Config.ARGB_8888);
                    Canvas c = new Canvas(foreground);
                    mainLayout.draw(c);

                    Bitmap cs = null;
                    cs = Bitmap.createBitmap(foreground.getWidth(), cameraBitmap.getHeight(), Bitmap.Config.ARGB_8888); 

                    Canvas comboImage = new Canvas(cs); 
                    comboImage.drawBitmap(cameraBitmap, 0f, 0f, null); 
                    comboImage.drawBitmap(foreground, 0f, cameraBitmap.getHeight(), null); 

                    FileOutputStream fos = null;
                    try {
                        fos = new FileOutputStream(file);
                        if (fos != null) {
                            cs.compress(Bitmap.CompressFormat.PNG, 90, fos);
                            fos.close();
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }   

The camera image should become background, and foreground as top image. I've tried from Combining 2 Images in Android using Canvas but it didn't help me. Any idea.? Thanks

解决方案

From your example, you forgot to add the next lines:

 comboImage.drawBitmap(c, 0f, 0f, null); 
 comboImage.drawBitmap(s, 0f, c.getHeight(), null);

In your example above you don't draw your image in the canvas, and that is the problem. You can think that your canvas i your sketchbook. For now you didn't paint anything, and you ask yourself, way I can't see any colors.

So, for my advice, first create the two bitmaps, then, do the next thing:

c.drawBitmap(cameraBitmap, top point, left point, null);
c.drawBitmap(foreground, top point, left point, null); 

You can also do this by first create the drawable objects from your bitmaps, like in the next code:

Drawable cameraBitmap = BitmapDrawable(cameraBitmap);
Drawable foreground= BitmapDrawable(foreground);

Then when you have the drawable objects, you can set thier bounds, and that way you set where do you want to show that image.

cameraBitmap.setBounds(left, top, right, bottom);
foreground.setBounds(left, top, right, bottom);

and finally draw that on the canvas:

cameraBitmap.draw(canvas);
foreground.draw(canvas);

EDIT:

This is an example, use this to understand your implementation:

    Bitmap bitmap = null;
    try {

        bitmap = Bitmap.createBitmap(500, 500, Config.ARGB_8888);
        Canvas c = new Canvas(bitmap);
        Resources res = getResources();


        Bitmap bitmap1 = BitmapFactory.decodeResource(res, R.drawable.test1); //blue

        Bitmap bitmap2 = BitmapFactory.decodeResource(res, R.drawable.test2); //green
        Drawable drawable1 = new BitmapDrawable(bitmap1);
        Drawable drawable2 = new BitmapDrawable(bitmap2);


        drawable1.setBounds(100, 100, 400, 400);
        drawable2.setBounds(150, 150, 350, 350);
        drawable1.draw(c);
        drawable2.draw(c);


    } catch (Exception e) {
    }
    return bitmap;

This is what I get from the code above:

这篇关于在Android中合并两个位图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆