Увеличение картинок программно в Android

Я могу получить изображения с моего телефона и сохранить их в массиве. После этого я показываю их на экране. Но все они разной формы и размера. Я хочу отобразить их всех одинакового размера и формы. Есть идеи?

photoPaths = new ArrayList<String>();   
     getAllPhotos(Environment.getExternalStorageDirectory(), photoPaths);
     images = new Bitmap[photoPaths.size()];


         apa = (AnimationPhotoView)findViewById(R.id.animation_view);
        for(int i=0;i<photoPaths.size();i++)
        {
            File imgFile = new  File(photoPaths.get(0));

            if(imgFile.exists())
            {

                images[0] = decodeFile(imgFile);}

person user182192    schedule 06.04.2012    source источник


Ответы (4)


Я использую:

Bitmap bitmap = //Your source

int newWidth = //compute new width
int newHeight = //compute new height

bitmap = Bitmap.createScaledBitmap(bitmap, scaleWidth, scaleHeight, true);

Последний boolean — это filter, что делает ваше изображение более гладким.

Решение, представленное MAC выше, дало мне IllegalArgumentException: bitmap size exceeds 32bits.

Это только масштабирует растровое изображение и не вращает его.

person Johan S    schedule 07.05.2013

Если вы просто хотите отображать jpg-изображения или форматы изображений, которые «известны» Android, вы можете просто использовать MediaStore.Images и извлекать миниатюры, это быстрее и требует меньше памяти, а изображения уже должны иметь одинаковый формат ( Ширина+Высота).

http://developer.android.com/reference/android/provider/MediaStore.Images.html

person TSGames    schedule 06.04.2012

я думаю, вы можете попробовать это тоже.

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=200;
        int width_tmp=o.outWidth, height_tmp=o.outHeight;
        int scale=1;
        while(true)
        {
            if(width_tmp/2<REQUIRED_SIZE || height_tmp/2<REQUIRED_SIZE)
                break;
            width_tmp/=2;
            height_tmp/=2;
            scale*=2;
        }
        //decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize=scale;
        return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
    } catch (FileNotFoundException e) {}
    return null;
}
person MPG    schedule 28.11.2014

person    schedule
comment
Работал отлично!! Мне нужно подождать, чтобы принять. Спасибо Мак - person user182192; 06.04.2012
comment
На самом деле я получаю исключение при использовании этого: IllegalArgumentException: bitmap size exceeds 32bits, вместо этого проверьте мой ответ. - person Johan S; 07.05.2013
comment
используйте это, чтобы не получить Bitmap size exceeds - person MAC; 07.05.2013