Herry
Herry

Reputation: 7087

Combine Images in android

how to merge two images in android by programming in java and save in external SD Card or some where else.

Upvotes: 5

Views: 11473

Answers (2)

user456118
user456118

Reputation:

Try out this code.

private static final String TAG = "JoinImage";
private Bitmap mBackImage, mTopImage, mBackground; 
private BitmapDrawable mBitmapDrawable;
private static String mTempDir;
private String mSavedImageName = null; 
private FileOutputStream mFileOutputStream = null;
private Canvas mCanvas;

in onCreate()

//Create folder in SDCard to store newly generated image
mTempDir = Environment.getExternalStorageDirectory() + "/TestTemp/";
File mTempFile = new File(mTempDir);
if(!mTempFile.exists()) {
    mTempFile.mkdirs();
}
//File name 
mSavedImageName = "Test.png";
//Width = 604, Height = 1024 Change as per your requirement
mBackground = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
//Put back and top images in your res folder
mBackImage = BitmapFactory.decodeResource(getResources(), R.drawable.launcher);
mTopImage = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

mCanvas = new Canvas(mBackground);
mCanvas.drawBitmap(mBackImage, 0f, 0f, null);
mCanvas.drawBitmap(mTopImage, 12f, 12f, null);

try {
    mBitmapDrawable = new BitmapDrawable(mBackground);
    Bitmap mNewSaving = mBitmapDrawable.getBitmap();
    String FtoSave = mTempDir + mSavedImageName;
    File mFile = new File(FtoSave);
    mFileOutputStream = new FileOutputStream(mFile);
    mNewSaving.compress(CompressFormat.PNG, 95, mFileOutputStream);
    mFileOutputStream.flush();
    mFileOutputStream.close();
} catch(FileNotFoundException e) {
    Log.e(TAG, "FileNotFoundExceptionError " + e.toString());
} catch(IOException e) {
    Log.e(TAG, "IOExceptionError " + e.toString());
}
Log.i(TAG, "Image Created");

in Manifestadd this uses-permission <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

Upvotes: 3

ingsaurabh
ingsaurabh

Reputation: 15269

Try below code

private Bitmap joinImages(File first, File second)
{
    Bitmap bmp1, bmp2;
    bmp1 = BitmapFactory.decodeFile(first.getPath());
    bmp2 = BitmapFactory.decodeFile(second.getPath());
    if (bmp1 == null || bmp2 == null)
        return bmp1;
    int height = bmp1.getHeight();
    if (height < bmp2.getHeight())
        height = bmp2.getHeight();

    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth() + bmp2.getWidth(), height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bmOverlay);
    canvas.drawBitmap(bmp1, 0, 0, null);
    canvas.drawBitmap(bmp2, bmp1.getWidth(), 0, null);
    return bmOverlay;
}

Upvotes: 8

Related Questions