Декодировать растровое изображение повернутым - PullRequest
1 голос
/ 12 марта 2012

Я ищу способ декодирования растрового изображения из повернутого файла (0,90,180,270 градусов). Мне это нужно, потому что изображение большое, и если я декодирую растровое изображение, а затем использую что-то вроде

Bitmap rotatedBitmap=Bitmap.createBitmap(source, x, y, width, height, m, filter)

Существует момент, когда оба растровых изображения находятся в памяти и существует риск нехватки памяти.

Есть идеи? Спасибо.

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Возможно, это то, что вы ищете?

    //decodes image and scales it to reduce memory consumption
    //NOTE: if the image has dimensions which exceed int width and int height
    //its dimensions will be altered.
    private Bitmap decodeToLowResImage(byte [] b, int width, int height) {
        try {
            //Decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new ByteArrayInputStream(b), null, o);

            //The new size we want to scale to
            final int REQUIRED_SIZE_WIDTH=(int)(width*0.7);
            final int REQUIRED_SIZE_HEIGHT=(int)(height*0.7);

            //Find the correct scale value. It should be the power of 2.
            int width_tmp=o.outWidth, height_tmp=o.outHeight;
            int scale=1;
            while(true){
                if(width_tmp/2<REQUIRED_SIZE_WIDTH || height_tmp/2<REQUIRED_SIZE_HEIGHT)
                    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 ByteArrayInputStream(b), null, o2);
        } catch (OutOfMemoryError e) {
            //handle this
        }
        return null;
    }
0 голосов
/ 26 января 2014

Если вы хотите использовать решение на основе NDK, я создал одно здесь , и я создал проект github здесь .

это позволит избежать OOM, поместив данные в собственный "мир" C, переработав старые данные и вернув результат обратно после ротации.требует понижающей выборки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...