2013-01-06 5 views
8

J'ai ce code dans une classe qui étend la vue de surface et implémente runnable Je suis capable d'utiliser la classe permet essentiellement de dessiner sur le canevas en utilisant des couleurs différentes et autres. J'essaie d'obtenir une méthode qui me permettra de sauvegarder l'image après qu'elle soit dessinée et c'est la méthode. Peu importe ce que je fais, je reçois juste une image noire avec rien dessus. Des idées?Obtenir bitmap à partir de Custom SurfaceView

J'ai dessin du cache activé

Objectif obtenir une image bitmap à partir d'un SurfaceView personnalisé j'ai épuisé les options de recherche à un autre poste ici et n'a pas trouvé quoi que ce soit au travail. En espérant qu'il y a récemment une nouvelle solution à cela. Un grand merci

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; 
     } 
+0

Qu'est-ce que vous vous attendez à 'this.getWidth()' et 'this.getHeight()' donner? –

+0

Vous créez une nouvelle image bitmap, qui ne contient rien. Ensuite, vous créez un canevas à partir de ce bitmap vide. Vous n'avez fait aucun dessin, comment pouvez-vous vous attendre à un dessin? Juste une note: si vous surchargez la méthode onDraw() de SurfaceView, veillez à appeler 'setWillNotDraw (false)' dans votre constructeur de classe. –

+0

je m'attendais à obtenir la largeur et la hauteur de la surface vu que c'est la classe que je suis en train d'étendre. –

Répondre

1

Votre question est devenue claire seulement par votre dernier commentaire. Dans le code que vous avez posté ci-dessus, vous revenez avec return bitmap. Cela renverra la variable locale bitmap. Cette variable locale est totalement vide. Vous dessinez peut-être sur votre image ou y associez une image, ailleurs dans le code. Mais le instance de bitmap dans votre code ci-dessus, est vide et seulement local à la fonction. Vous ne pouvez pas vous attendre à ce que vous retourniez votre dernier bitmap mis à jour.

Maintenant, après votre commentaire que je googlé « obtenir une image bitmap de surfaceview actuelle » et il m'a conduit à cette réponse SO: Create Bitmap from SurfaceView

Dans cette question, il a été apparemment résolu par l'extension de vue au lieu de SurfaceView. Le cache de dessin ne fonctionne que pour View.

Mise à jour: Suivez 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 faites pour dessiner sur SurfaceView, et je ne suis pas sûr si vous avez fait cela, et je ne peux pas demander tous ces éléments manquants. J'ai suivi les tutoriels ci-dessous pour mes projets graphiques de base. Vous devez les lire et voir si vous avez manqué quelque chose.

Tutoriels sur le dessin de toile:

Playing with Graphics in android toutes les pièces.

Android 2D

+0

Il doit y avoir un moyen. J'ai vu d'autres personnes l'utiliser avec succès. Juste pas le codé. J'ai utilisé une vue avant que cela ne fonctionne pas parce que la performance n'était pas aussi rapide. Ce que j'ai essayé de faire maintenant était de faire un champ Image et toile. Puis j'ai placé l'image dans la toile et quand j'appelle onDraw je viens d'envoyer ma toile au lieu de celle qu'ils voulaient. Toujours pas fonctionné ... aucune idée de ce qui attire à la surface et quand il est appelé. Je peux donc insérer ma toile à la place de celle qu'elle utilise. –

+0

Pour ne pas laisser SurfaceView dessiner sur le canevas, et en laissant votre propre 'onDraw()' pour faire la tâche, appelez 'setWillNotDraw (false)' depuis votre constructeur de classe. –

+0

Merci, je l'ai déjà inclus. Le soupir ne peut toujours pas en sortir l'image. J'ai un journal à l'intérieur onDraw et je ne le vois que quand je l'ouvre pour la première fois. Ce n'est pas appelé quand je dessine à la vue de surface? quand est-il appelé par anychance? –

Questions connexes