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?