2016-04-05 7 views
0

Ich versuche, eine Art Foto-Viewer mit OpenGL ES in Android zu machen.Schnelle Möglichkeit, Bitmap zu laden und eine Textur in Android

In meiner App, im Grunde, wenn ich auf eine Schaltfläche klicken, dann vollständige Foto-Pfade Liste in SD-Karte, ein Bitmap aus einem Foto und Textur als diese Bitmap dann zeichnen Sie nur in einfachen Quads. Aber das ist ziemlich langsam und auch die GL Ansicht friert, wenn es funktioniert

Textur machen sollte in GLTHREAD arbeiten, damit ich Listener und verwenden queueEvent()

die Code-Schnipsel wie folgt aus:

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)); 
          } 
         } 
        }); 

Wenn Ich überprüfe die Zeit, die zeitaufwendigste Arbeit ist decodeStream() So wie kann ich es verbessern? Gibt es eine effizientere Möglichkeit, Bitmap in Textur zu laden? oder Wie kann ich das Einfrieren von GLView vermeiden?

Antwort

0

Nun, ich nur geänderte Ladeteil aus dem GL Thread. Dann hört es auf zu frieren.

Ich habe auch a good training example für eine effiziente Bitmap loading

bezeichnet
0

Versuchen Sie es mit BitmapFactory.decodeFile() statt BitmapFactory.decodeStream()

Verwandte Themen