Android объединяет два изображения
У меня есть эти два изображения, которые я в основном объединяю на холсте. Теперь я хочу сохранить этот холст в изображение. Как мне это сделать или есть ли другой способ объединить два изображения.
Мой пример кода -
Bitmap bmp1 = BitmapFactory.decodeResource(getResources(),
R.drawable.duckpic);
Bitmap bmp2 = BitmapFactory.decodeResource(getResources(),
R.drawable.img);
// canvas.drawColor(Color.BLACK);
// canvas.drawBitmap(_scratch, 10, 10, null);
Bitmap bmOverlay = Bitmap.createBitmap(bmp2.getWidth(), bmp2
.getHeight(), bmp2.getConfig());
// Canvas cs = new Canvas(bmp2);
canvas.scale((float) 0.5, (float) 0.5);
canvas.drawBitmap(bmp2, new Matrix(), null);
canvas.drawBitmap(bmp1, new Matrix(), null);
canvas.save();
Я получил это, сделав это -
cs = Bitmap.createBitmap(c.getWidth(), c.getHeight(), Bitmap.Config.ARGB_8888);
Canvas comboImage = new Canvas(cs);
comboImage.drawBitmap(s, new Matrix(), null);
comboImage.drawBitmap(c, new Matrix(), null);
comboImage.save();
// this is an extra bit I added, just incase you want to save the new
// image somewhere and then return the location
String tmpImg = String.valueOf(System.currentTimeMillis()) + ".png";
OutputStream os = null;
try {
os = new FileOutputStream("/sdcard/" + tmpImg);
cs.compress(CompressFormat.PNG, 100, os);
} catch (IOException e) {
Log.e("combineImages", "problem combining images", e);
}
В основном это дано здесь - http://www.jondev.net/articles/Combining_2_Images_in_Android_using_Canvas
3 ответа
Решение
Используйте canvas.setBitmap(Растровое изображение). Это отправит холст к указанному растровому изображению. Вы захотите создать новое, изменяемое растровое изображение для этого. После звонка setBitmap
затем вы можете сохранить это растровое изображение в файл.
Используйте эту ссылку....... это может помочь вам. https://github.com/hotveryspicy/MaskImage
Bitmap Final_image = null;
Final_image = Bitmap.createBitmap(bitmap_first.getWidth(), bitmap_first.getHeight(), Bitmap.Config.ARGB_8888);
Canvas comboImage = new Canvas(Final_image);
comboImage.drawBitmap(bitmap_first, 0f, 0f, null);
//this is X and Y for combineImages
comboImage.drawBitmap(bitmap_second, 0f,bitmap_first.getHeight()-bitmap_second.getHeight()-50f, null);
String tmpImg = String.valueOf(System.currentTimeMillis()) + ".jpg";
OutputStream os = null;
try {
os = new FileOutputStream("final" + tmpImg);
Final_image.compress(Bitmap.CompressFormat.JPEG, 100, os);
} catch(IOException e) {
Log.e("combineImages", "problem combining images", e);
}
saveImage(Final_image);
и сохранить функцию:
private void saveImage(Bitmap bitmap) throws IOException {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
Date date = new Date();
CharSequence format = android.text.format.DateFormat.format("yyyy-MM-dd_hh:mm:ss", date);
String dirpath = Environment.getExternalStorageDirectory() + "";
File file = new File(dirpath);
if (!file.exists()) {
boolean mkdir = file.mkdir();
}
String path1 = dirpath + "/Documents/QSIM/SCREENSHOT/";
File imageurl1 = new File(path1);
imageurl1.mkdirs();
File f = new File(path1 +"/"+ format + ".png");
f.createNewFile();
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
fo.close();
}