Capture d'écran de GLSurfaceView bitmap
J'ai besoin d'être en mesure de capturer une image d'un GLSurfaceView
à certains moment dans le temps. J'ai le code suivant:
relative.setDrawingCacheEnabled(true);
screenshot = Bitmap.createBitmap(relative.getDrawingCache());
relative.setDrawingCacheEnabled(false);
Log.v(TAG, "Screenshot height: " + screenshot.getHeight());
image.setImageBitmap(screenshot);
La GLSurfaceView
est contenue dans un RelativeLayout
, mais j'ai aussi essaye directement à l'aide de la GLSurfaceView
d'essayer de capturer l'image. Avec cela, je pense que les captures d'écran une image transparente, c'est à dire rien. Toute aide sera appréciée.
- Salut à tous je suis en train de vivre le même problème avez vous trouvez une solution, si oui merci de les partager, merci.
- Je n'ai pas trouver de réponse à cette question, désolé.
- Êtes-vous rendu en permanence??
- u ne trouver aucune solution? si oui, alors veuillez me dire sur ce lien stackoverflow.com/questions/8531481/...
Vous devez vous connecter pour publier un commentaire.
SurfaceView
etGLSurfaceView
percez des trous dans leurs fenêtres pour permettre à leurs surfaces pour être affiché. En d'autres termes, ils ont des zones transparentes.Donc vous ne pouvez pas capturer une image en appelant
GLSurfaceView.getDrawingCache()
.Si vous voulez obtenir une image à partir de
GLSurfaceView
, vous devriez appelergl.glReadPixels()
dansGLSurfaceView.onDrawFrame()
.J'ai patché
createBitmapFromGLSurface
de la méthode et de l'appeler dansonDrawFrame()
.(Le code original sera peut-être de skuldle code.)
createBitmapFromGLSurface
dans votre GLSurfaceView sous-classe. L'appelant dansonDraw()
est important.int pixel = (texturePixel & 0xffffffff);
- Votre combinaison est donner beaucoup trop d'une nuance de bleu. Merci encore une fois!Ici est une solution complète si vous êtes à l'aide d'un tiers de la bibliothèque que vous venez de 'passer' a GLSurfaceView définis dans votre mise en page. Vous n'aurez pas à gérer la onDrawFrame() de la fonctionnalité de rendu, cela peut être un problème...
Pour ce faire vous avez besoin de faire la queue pour le GLSurfaceView à manipuler.
Remarque: Dans le présent code, lorsque je clique sur le Bouton, il prend la capture d'écran que l'Image et l'enregistre dans sdcard emplacement. J'ai utilisé de la condition booléenne et une
if
déclaration dansonDraw
méthode, parce que la classe de rendu peut appeler laonDraw
méthode à tout moment et de toute façon, et sans laif
ce code peut économiser beaucoup d'images dans la carte mémoire.MainActivity classe:
MyRenderer classe:
Vous pouvez utiliser un GLTextureView l'extension de TextureView au lieu de GlsurfaceView pour vous montrer OpenGL données.
Voir: http://stackoverflow.com/questions/12061419/converting-from-glsurfaceview-to-textureview-via-gltextureview
Comme le GLTextureView s'étend de TextureView, il a un getBitmap fonction qui devrait fonctionner.