2016-04-05 2 views
0

Я пытаюсь сделать своего рода просмотрщик фотографий с помощью OpenGL ES в Android.Быстрый способ загрузки растрового изображения и создания текстуры в Android

В моем приложении, в основном, когда я нажимаю кнопку, то получаю полный список путей фотографии на SDCard, создавайте растровое изображение с фотографии и устанавливаем текстуру в виде растрового изображения, а затем рисуем его просто в простых квадрациклах. Но это довольно медленно, и даже вид GL замерзает, когда он работает

делает текстуру должен работать в GLthread поэтому я Слушатель и использовать queueEvent()

фрагменты кода, как это:

public void setTexture(Context context, final String string) { 
Bitmap bitmap = null; 
try { 
    Uri uri = Uri.fromFile(new File(string)); 
    bitmap = BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri)); 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 
// upload texture by bitmap 
GLES20.glActiveTexture(GLES20.GL_TEXTURE0); 
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texture); 
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0); 
bitmap.recycle(); 
} 


queueEvent(new Runnable() { 
       @Override 
       public void run() { 
        for (int i = 1; i < photos.size() - 1; i++) { 
         try { 
          exifInterface = new ExifInterface(photoList.get(i)); 
           } catch (IOException e) { 
            e.printStackTrace(); 
           } 
           String orientation = exifInterface.getAttribute(ExifInterface.TAG_ORIENTATION); 
           Log.d(TAG, "photoOrientation: " + orientation); 
           photos.get(i).setOrientation(Integer.parseInt(orientation)); 
           photos.get(i).setTexture(mContext, photoList.get(i)); 
          } 
         } 
        }); 

Когда Я проверяю время, самая трудоемкая работа - decodeStream() Итак, как я могу его улучшить? Есть ли способ более эффективный способ загрузки растрового изображения в текстуру? или по крайней мере Как я могу избежать замораживания GLView?

ответ

0

Ну я просто измененная загрузка часть из GL Thread. Затем он останавливается.

Я также упомянул a good training example для эффективной растровой загрузки

0

Попробуйте использовать BitmapFactory.decodeFile() вместо BitmapFactory.decodeStream()

Смежные вопросы