Недостаточно памяти и ошибки OpenGL при манипулировании двумя изображениями на Android - PullRequest
0 голосов
/ 19 июня 2011

Привет: Мне нужно изображения на двух файлах (слева и справа). Я хочу показать их рядом в ImageSwitcher.Это функция, которая возвращает Drawable, который я хочу установить в переключателе изображений:

public Drawable getImage(String left, String right){
    System.err.println("Decoding both images");
    Bitmap Left = BitmapFactory.decodeFile(left);
    Bitmap Right = BitmapFactory.decodeFile(right);
    int height = Math.max(Left.getHeight(),Right.getHeight());
    int width = Left.getWidth() + Right.getWidth();
    Bitmap result = Bitmap.createBitmap(width,height,Config.RGB_565);       
    System.err.println("Creating the canvas");
    Canvas bothImages = new Canvas(result);
    System.err.println("Drawing both images beside each other");
    bothImages.drawBitmap(Left, 0f, 0f, null);
    bothImages.drawBitmap(Right, Left.getWidth(), 0f, null);
    System.err.println(Integer.toString(bothImages.getWidth()) + " x " + Integer.toString(bothImages.getHeight())); 
    bothImages.rotate(90f);
    System.err.println(Integer.toString(bothImages.getWidth()) + " x " + Integer.toString(bothImages.getHeight()));
    System.err.println("returning Drawable Left");
    return new BitmapDrawable(result);
}

У меня две проблемы.Если я использую Config.ARGB_8888, я получаю ошибки памяти.Поэтому я перешел на RGB_565.Однако это снизит качество изображений.Есть ли что-нибудь вокруг этого?

Во-вторых, даже когда я меняю настройки конфигурации, я получаю следующие консольные сообщения:

06-19 09:16:23.760: WARN/System.err(26218): Attempting to show /mnt/sdcard/Work/.temp/0000.jpg
06-19 09:16:23.760: WARN/System.err(26218): Decoding both images
06-19 09:16:24.510: WARN/System.err(26218): Creating the canvas
06-19 09:16:24.510: WARN/System.err(26218): Drawing both images beside each other
06-19 09:16:24.530: WARN/System.err(26218): 2560 x 1971
06-19 09:16:24.530: WARN/System.err(26218): 2560 x 1971
06-19 09:16:24.530: WARN/System.err(26218): returning Drawable Left
06-19 09:16:24.570: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture
06-19 09:16:24.850: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture
06-19 09:16:24.870: WARN/System.err(26218): Inside On resume
06-19 09:16:24.870: WARN/System.err(26218): About to set up animations
06-19 09:16:24.870: WARN/System.err(26218): On resume Done
06-19 09:16:24.870: WARN/System.err(26218): Attempting to show /mnt/sdcard/Work/.temp/0000.jpg
06-19 09:16:24.870: WARN/System.err(26218): Decoding both images
06-19 09:16:25.610: WARN/System.err(26218): Creating the canvas
06-19 09:16:25.610: WARN/System.err(26218): Drawing both images beside each other
06-19 09:16:25.640: WARN/System.err(26218): 2560 x 1971
06-19 09:16:25.640: WARN/System.err(26218): 2560 x 1971
06-19 09:16:25.640: WARN/System.err(26218): returning Drawable Left
06-19 09:16:25.660: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture
06-19 09:16:25.690: WARN/OpenGLRenderer(26218): Bitmap too large to be uploaded into a texture

И я, очевидно, никогда не вижу сгенерированное изображение.Итак, я хочу знать, что я делаю неправильно?

На заметке сторонних производителей первые два изображения должны быть показаны при запуске действия, поэтому приведенный выше код вызывается для метода OnResume действия.Может ли кто-нибудь сказать мне, почему этот метод выполняется дважды (как видно из распечатки)?Потому что, возможно, мои ошибки нехватки памяти связаны с этим ...

Спасибо за любую помощь заранее.

Ответы [ 2 ]

2 голосов
/ 07 ноября 2011

Может быть, вы поражены аппаратным пределом, упомянутым здесь

http://groups.google.com/group/android-developers/browse_thread/thread/2352c776651b6f99

0 голосов
/ 21 июня 2011

Это не совсем ответ, но, возможно, это поможет кому-то.Я обошел проблему, используя два изображения рядом друг с другом.Если все, что вы хотите сделать, это увидеть изображения (что было в моем случае), то чтобы заставить изображения соприкасаться с границей, я использовал фит-фитинг FitScaleType для изображения слева и фитстарт для изображения справа (в альбомном режимемой случай).

...