Created
March 9, 2012 00:19
-
-
Save Richie97/2004295 to your computer and use it in GitHub Desktop.
immutable Bitmap into mutable bitmap.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static Bitmap convertToMutable(Bitmap imgIn) { | |
try { | |
//this is the file going to use temporally to save the bytes. | |
// This file will not be a image, it will store the raw image data. | |
File file = new File(Environment.getExternalStorageDirectory() + File.separator + "temp.tmp"); | |
//Open an RandomAccessFile | |
//Make sure you have added uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" | |
//into AndroidManifest.xml file | |
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw"); | |
// get the width and height of the source bitmap. | |
int width = imgIn.getWidth(); | |
int height = imgIn.getHeight(); | |
Bitmap.Config type = imgIn.getConfig(); | |
//Copy the byte to the file | |
//Assume source bitmap loaded using options.inPreferredConfig = Config.ARGB_8888; | |
FileChannel channel = randomAccessFile.getChannel(); | |
MappedByteBuffer map = channel.map(FileChannel.MapMode.READ_WRITE, 0, imgIn.getRowBytes()*height); | |
imgIn.copyPixelsToBuffer(map); | |
//recycle the source bitmap, this will be no longer used. | |
imgIn.recycle(); | |
System.gc();// try to force the bytes from the imgIn to be released | |
//Create a new bitmap to load the bitmap again. Probably the memory will be available. | |
imgIn = Bitmap.createBitmap(width, height, type); | |
map.position(0); | |
//load it back from temporary | |
imgIn.copyPixelsFromBuffer(map); | |
//close the temporary file and channel , then delete that also | |
channel.close(); | |
randomAccessFile.close(); | |
// delete the temp file | |
file.delete(); | |
} catch (FileNotFoundException e) { | |
e.printStackTrace(); | |
} catch (IOException e) { | |
e.printStackTrace(); | |
} | |
return imgIn; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment