Obtenir de l'image Bitmap à partir Personnalisé SurfaceView
J'ai ce code dans une classe qui étend la surface d'affichage et implements runnable
Je suis en mesure d'utiliser la classe fondamentalement vous permet de dessiner sur la toile à l'aide de différentes couleurs et de. J'essaye de trouver une méthode qui me permet d'enregistrer l'image après il est tiré, et c'est la méthode. Peu importe ce que je fais, je viens d'obtenir une image en noir avec rien sur elle. Des idées?
J'ai cache dessin activé
Objectif d'obtenir une image bitmap à partir d'un personnalisé SurfaceView j'ai épuisé les options de recherche à un autre post ici et n'a rien trouvé de travail. Voici en espérant qu'il n'y a récemment une nouvelle solution à cette question. Merci beaucoup
public Bitmap getImage() {
Bitmap bitmap = Bitmap.createBitmap(this.getWidth(),
this.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
this.draw(canvas);
return bitmap;
}
this.getWidth()
et this.getHeight()
à donner?Vous êtes à la création d'une nouvelle image, qui n'a rien sur lui. Ensuite, vous créez une Toile à partir de ce vide bitmap. Vous n'avez pas fait de dessin, comment pouvez-vous attendre d'un dessin? Juste une remarque: si vous remplacez le onDraw() la méthode de la SurfaceView, veillez à appeler
setWillNotDraw(false)
dans votre constructeur de la classe.je m'attendais à obtenir le surfaceview la largeur et la hauteur, puisque c'est la classe je suis l'extension.
Ce que je pensais passer, c'est que je crée un nouveau bitmap qui a la dimension de mon surfaceview. La j'ai une nouvelle toile qui attirera à mon image. Puis-je appeler ce.dessiner pour dessiner sur mes toiles, qui tire alors à l'image? suis-je tort de penser? im deviner je dois être
à partir de developer.android.com Construire une toile avec le bitmap à attirer dans. Le bitmap doit être mutables. L'objectif initial de la densité de la toile est la même que le bitmap est la densité. Paramètres bitmap Spécifie une mutable bitmap pour le canevas pour dessiner.
OriginalL'auteur Lpc_dark | 2013-01-06
Vous devez vous connecter pour publier un commentaire.
Votre question est devenu clair que par votre dernier commentaire. Dans le code que vous avez posté ci-dessus, vous êtes de retour avec
return bitmap
. Que sera le retour de la variable localebitmap
. Cette variable locale est totalement vierge. Vous pouvez peut-être le dessin de votre image ou l'association d'une image, d'autre part dans le code. Mais le instance de bitmap dans votre code ci-dessus, est vide et seulement locale à la fonction. Vous ne pouvez pas attendre le retour de votre mise à jour, la dernière image bitmap.Maintenant, après votre commentaire j'ai googlé "obtenir une image bitmap de courant surfaceview" et il m'a conduit à cette SORTE de réponse: Créer Bitmap à partir d'SurfaceView
Dans cette question, il a été apparemment résolu par l'extension de Vue au lieu de SurfaceView. Dessin de cache ne fonctionne que pour la Vue.
Mise à jour: Suivre les tutoriels ci-dessous. Basé sur le code collé par vous, il n'est pas clair quelle est l'erreur. Il y a beaucoup de choses qui doivent être fait pour le dessin à SurfaceView, et je ne sais pas si vous l'avez fait, et je ne peux pas demander, pour chaque élément manquant. J'ai suivi les tutoriels ci-dessous pour mes graphiques de base des projets. Vous avez besoin de les lire et de voir si vous avez manqué quelque chose.
De tutoriels sur la Toile dessin:
Jouer avec des Graphismes android toutes les parties.
Android 2D
Pour ne pas laisser SurfaceView lui-même tirage de la toile, et de laisser votre propre
onDraw()
à faire la tâche, appelsetWillNotDraw(false)
de votre constructeur de la classe.Grâce a vous que j'ai déjà inclus. Soupir ne pouvez toujours pas obtenir l'image. J'ai un journal à l'intérieur de onDraw et im seulement de le voir appelé quand j'ai ouvert l'application. Il ne s'appelle pas lorsque je dessine à la surface d'affichage? quand est-il appelé par anychance?
Lorsque vous appelez
invalidate()
votreonDraw()
est appelé à nouveau. Ce que je voudrais suggérer, faire vos dessins dans un nouveau Thread. Dans lerun()
méthode du Fil, vous pouvez mettre à jour la Toile et de les appelerinvalidate()
. Ceci appelleonDraw()
et de montrer à jour en toile.run()
est aussi appelé une fois sur le fil de la création, de sorte que vous avez à mettre en œuvre unwhile(true)
boucle infinie à l'intérieur derun()
pour maintenir à jour votre dessin.Je ne vais pas être en mesure d'appeler invalider parce que seul le Thread qui a créé, il sera en mesure d'y accéder. juste essayé
OriginalL'auteur sanjeev mk