Как повернуть изображение в виде галереи - PullRequest
2 голосов
/ 19 мая 2011

Это простая проблема, но мне интересно, есть ли у нее недорогое решение.

У меня есть вид галереи, который загружает изображения из памяти, SD-карты или ресурсов. Их размер 480х800, поэтому код сэмплирует их и отображает в виде миниатюр в виде галереи. Все отлично работает, вроде ...

Некоторые изображения в альбомной ориентации, а некоторые портретные. Макет просмотра изображений в галерее показывает их все в альбомной ориентации, поэтому все портретные изображения выглядят сильно растянутыми!

Поскольку эти изображения являются абстрактными рисунками, я хотел бы повернуть портретные, чтобы они все красиво и равномерно помещались в галерее. Я мог определить их ориентацию, сравнивая их ширину и высоту, а затем вращая портретные, используя Matrix и canvas, но это может быть слишком дорогим и медленным для запуска в getView () BaseAdapter.

Кто-нибудь может придумать менее дорогой способ сделать это?

    public View getView(int position, View convertView, ViewGroup parent){   
        ImageView i = new ImageView(mContext);   
        Bitmap bm = null;

        if (mUrls[position] != null){
            bm = BitmapFactory.decodeFile(mUrls[position].toString(),options); 
            if (bm != null){
                //here could use a bitmap rotation code
                //....
                i.setImageBitmap(bm);
            }
        }else{
            bm = BitmapFactory.decodeResource(getResources(), R.drawable.deleted);
            i.setImageBitmap(bm);
        }
        i.setScaleType(ImageView.ScaleType.FIT_XY);   
        i.setLayoutParams(new Gallery.LayoutParams(200, 130)); 
        i.setBackgroundResource(mGalleryItemBackground);
        return i;   
    }

EDIT

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

int w = bm.getWidth();
int h = bm.getHeight();
if (w < h){
  Matrix matrix = new Matrix(); 
  matrix.postRotate(-90);
  bm = Bitmap.createBitmap(bm, 0, 0, w, h, matrix, false);    
}
i.setImageBitmap(bm);

1 Ответ

0 голосов
/ 19 мая 2011

Введите матрицу !!!

Изменение размера и поворот изображения - пример

очень полезно для меня, надеюсь, это поможет

  if (bm != null){
        Matrix matrix = new Matrix();
        matrix.postScale(scaleWidth, scaleHeight);
        matrix.postRotate(45);
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, width, height, matrix, true);   
        BitmapDrawable bmd = new BitmapDrawable(resizedBitmap);
        i.setImageBitmap(bmd); 
       }

Работы по утилизации, я рекомендую использовать asynctask для загрузки изображений, чтобы избежать блоков пользовательского интерфейса.

Вот пример ::

http://android -apps-blog.blogspot.com / 2011/04/how-to-use-asynctask-to-load-images-on.html

другой пример ::

http://open -pim.com /TMP / LazyList.zip

...