Я бы попробовал что-то вроде:
public static Bitmap mergeImages(Bitmap bottomImage, Bitmap topImage) {
final Bitmap output = Bitmap.createBitmap(bottomImage.getWidth(), bottomImage
.getHeight(), Config.ARGB_8888);
final Canvas canvas = new Canvas(output);
final Paint paint = new Paint();
paint.setAntiAlias(true);
canvas.drawBitmap(bottomImage, 0, 0, paint);
canvas.drawBitmap(topImage, 0, 0, paint);
return output;
}
(не проверял, я только что написал здесь, там могут быть некоторые простые ошибки)
По сути, вы создаете3-е пустое растровое изображение, нарисуйте нижнее изображение на нем, а затем нарисуйте верхнее изображение поверх него.
Что касается сохранения в файл, вот несколько примеров: Сохранить растровое изображение в местоположение