Yes, the images from the camera are 2048px by 1536px.  If you convert
to a bitmap, thats 2048 x 1536 x 2 = 6291456, or 6MB.  This is right
at the allotted space an Activity gets.  If you can live with smaller
images, I would suggest using a sampleSize of > 1 when decoding the
image.  This will result in a smaller image size, thus less memory
used.  I have used the following code in the past to keep my images
under a set byte count.  Alternatively, you could forget about
calculating the sample size and just set it to 2.  This would use
1.5MB instead of 6MB on a standard image.


//Get dimensions of image first (takes very little time)
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inJustDecodeBounds = true;
bfo.inDither = false;
bfo.inPreferredConfig = Bitmap.Config.RGB_565;
BitmapFactory.decodeStream(cr.openInputStream(uriAvator),null, bfo);

//Calculate sample size to keep image under maxFileSize
int maxFileSize = 1572864; //in bytes
int sampleSize = 1;
long fileSize = 2 * (bfo.outWidth/sampleSize) * (bfo.outHeight/
sampleSize);
while(fileSize > maxFileSize)
{
        sampleSize++;
        fileSize = 2 * (bfo.outWidth/sampleSize) * (bfo.outHeight/
sampleSize);
}

//Decode image using calculated sample size
bfo.inSampleSize = sampleSize;
bfo.inJustDecodeBounds = false;
bmpAvator =  BitmapFactory.decodeStream(cr.openInputStream
(uriAvator),null, bfo);


-Mike-

On Oct 7, 10:07 pm, huanwu <[email protected]> wrote:
> i got a problem
> i intend to use
>
> intent.setAction(Intent.ACTION_GET_CONTENT);
> startActivityForResult(intent, 1);
>
> to select picture from gallery in google phone, and load the selected
> photo back into my application
> it works ok in the emulator
> but when i punt it on real google phone (HTC hero/ HTC magic)
> if i capture a photo in the gallery, and select the photo,
> it sometimes crash (not always)
> is it because the photo is too large or something?
> are there any solution? thanks!
>
> //--------following are part of my code-----//
>
> private void getGalleryImage()
>     {
>         //...
>
>         selectNewPicture = false;
>         Intent intent = new Intent();
>         intent.setType("image/*");
>         intent.setAction(Intent.ACTION_GET_CONTENT);
>         startActivityForResult(intent, 1);
>
>     }
>     @Override
>     protected void onActivityResult(int requestCode, int
> resultCode,Intent data)
>     {
>       if (resultCode == RESULT_OK)
>       {
>         uriAvator = data.getData();
>
>         ContentResolver cr = this.getContentResolver();
>
>         try
>         {
>           bmpAvator = Bitmap.createBitmap(BitmapFactory.decodeStream
> (cr.openInputStream(uriAvator)));
>
>           //Do Cutting
>           int dX = bmpAvator.getWidth();
>           int dY = bmpAvator.getHeight();
>           int dMin = Math.min(dX, dY);
>           if(dX > dY)
>               bmpAvator = Bitmap.createBitmap(bmpAvator, (dX-dMin)>>1,
> 0, dMin, dMin);
>           else if(dX < dY)
>                   bmpAvator = Bitmap.createBitmap(bmpAvator, 0, (dY-dMin)>>1,
> dMin, dMin);
>
>           //Do Scaling
>           bmpAvator = Bitmap.createScaledBitmap(bmpAvator, 100, 100,
> true);
>
>           //Compress into jpeg
>
>           myAvator.setImageBitmap(bmpAvator);
>         } catch (FileNotFoundException e)
>         {
>           e.printStackTrace();
>         }
>       }
>       super.onActivityResult(requestCode, resultCode, data);
>     }
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to