2015-09-16 8 views
6

Ich verwende diesen Code, um mehrere Auswirkungen auf Bitmap, die auf GlSurfaceView ist. apply-effects-on-image-using-effectsSo speichern Sie Bitmap aus GLSurfaceView (Nur Bitmap, nicht ganze Textur)

Jetzt möchte ich die Bitmap speichern. Sie haben den Code zum Speichern der Bitmap angegeben, aber das gesamte GlSurfaceView wird als Bitmap-Bild gespeichert. Stattdessen möchte ich nur Bitmap-Bereich speichern, um als Bild zu speichern.

Es gibt Methode, die Pixel nimmt und Bitmap daraus macht und auch Bild macht. z.B .:

public Bitmap takeScreenshot(GL10 mGL) { 
    final int mWidth = mEffectView.getWidth(); 
    final int mHeight = mEffectView.getHeight(); 
    IntBuffer ib = IntBuffer.allocate(mWidth * mHeight); 
    IntBuffer ibt = IntBuffer.allocate(mWidth * mHeight); 


    mGL.glReadPixels(0, 0, mWidth, mHeight, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ib); 

    // Convert upside down mirror-reversed image to right-side up normal 
    // image. 
    for (int i = 0; i < mHeight; i++) { 
    for (int j = 0; j < mWidth; j++) { 
    ibt.put((mHeight - i - 1) * mWidth + j, ib.get(i * mWidth + j)); 
    } 
    } 

    Bitmap mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888); 
    mBitmap.copyPixelsFromBuffer(ibt); 
    return mBitmap; 
} 

Ich denke, ich brauche es, wie zu aktualisieren, anstatt sie mit 0, 0 beginnen zu sein, das sollte beginnen werden, mit Bitmap-Top-Koordinate links. Und das sollte bis Bitmap Höhe und Breite funktionieren.

Also, damit kann ich mein Problem gelöst, aber nicht wissen, wie man diese Koordinate von Bitmap-Bild in GLSurfaceView bekommen.

Bitte überprüfen Sie das Bild für mehr Klarstellung.

Originalbild:

enter image description here

Loaded Bild im Effekt Bildschirm:

enter image description here

Bild nach Anwendung des Effekts und speicherte es:

enter image description here

Das ist was ich will.

enter image description here

+0

Die Oberfläche des GLSurfaceView enthält genau das, was Sie gezeichnet haben. Da Sie beim Zeichnen des Bildes die Koordinaten angegeben haben, verstehe ich nicht, warum Sie die Koordinaten nicht kennen, wenn Sie das Bild zurücklesen wollen. – fadden

+0

@fadden Ich bin nicht sehr gut mit OpenGL-es. Mein Code ist fast derselbe wie der Link, den ich in meiner Frage angegeben habe. Kannst du das bitte beantworten, um die Bildkoordinate zu erhalten und nur Bildteil mit Effekt zu nehmen? –

+0

Warum nicht das Bild danach zuschneiden? – jyoon

Antwort

0

Wenn Sie die Abmessungen des Bildes erhalten können, können Sie die genaue Position des Bitmap erhalten.

Lassen Sie die Bildmaße x und y, und erhalten Sie die Bildschirmabmessungen folgende this post. Sei das a und b.

Ihre Startposition ist ((a-x)/2, (b-y)/2).

Verwenden Sie dies, um Ihr Bild zu beschneiden.

+0

OK Danke für die Antwort. Lass mich das versuchen. –

+0

das funktioniert nicht gut, wie ich will. –

+0

Ich bekomme nicht das richtige Bild, wenn ich es mit der gegebenen Berechnung speichern werde. –

Verwandte Themen