[android-developers] Re: image processing in android

2011-04-24 Thread Streets Of Boston
The classes Bitmap and BitmapFactory.

-- 
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

[android-developers] Re: Image processing in Android

2011-04-11 Thread Tancho
Yep, checked the whole memory table ..
everything seems clear, however I always get a Bitmap exceeds VM
Budget and the Bitmap is 64x64

On Apr 11, 1:33 am, lbendlin l...@bendlin.us wrote:
 http://www.eclipse.org/mat/

-- 
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


[android-developers] Re: Image processing in Android

2011-04-11 Thread Yahel
Bitmap memory management is buggy and completely unintuitive. It does
not show in MAT as it is allocated in another place and not counted in
the heap. Well it is counted but not easily released or something.

My app is all about images(a world of faces), and here is how I get it
to work most of the time :

//decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f){
try {

//decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);

//Find the correct scale value. It should be the power of
2.
final int REQUIRED_SIZE=480;
int width_tmp=o.outWidth, height_tmp=o.outHeight;
int sampleSize=1;
while(true){
if(width_tmp/2REQUIRED_SIZE || height_tmp/
2REQUIRED_SIZE)
break;
width_tmp/=2;
height_tmp/=2;
sampleSize*=2;
}


//decode with inSampleSize
Bitmap bitmap = null;
boolean cacheHasBeenCleared = false;

BitmapFactory.Options options = new
BitmapFactory.Options();
options.inSampleSize=sampleSize;
byte[] tempBuffer=new byte[8000];
options.inTempStorage = tempBuffer;

while ( (bitmap == null)  (sampleSize  64) ) {
try {
bitmap = BitmapFactory.decodeStream(new 
FileInputStream(f),
null, options);
} catch (OutOfMemoryError e) {

if (!cacheHasBeenCleared) {
this.clearMemoryCache();

//Try to free up some memory
System.gc();
System.runFinalization();
System.gc();

cacheHasBeenCleared = true;
}

sampleSize *=2;
}
}

return bitmap;

} catch (FileNotFoundException e) {}
return null;
}

The idea is to try to decode the file at top quality. If that throws
out of memory error, it tries to free memory and reopen the file but
with a smaller scale. Rinse and repeat.

Oh and don't think the second system.gc() can be removed that would be
so naïve of you :D That's Android framework we're talking about :D

Good luck with your app.

Yahel

-- 
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


[android-developers] Re: Image processing in Android

2011-04-10 Thread lbendlin
And you already have exhausted all the MAT features?

-- 
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

[android-developers] Re: Image processing in Android

2011-04-10 Thread lbendlin
http://www.eclipse.org/mat/

-- 
You received this message because you are subscribed to the Google
Groups Android Developers group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en