在Android中合并两个位图 [英] Merge two bitmaps in 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屋!