Я пытаюсь сделать своего рода просмотрщик фотографий с помощью 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?