Python Image de PIL.tostring()
Je suis nouveau sur Python et PIL. Je suis en train de suivre les exemples de code sur la façon de charger une image en Python par PIL, puis de dessiner ses pixels en utilisant openGL. Voici quelques ligne de code:
from Image import *
im = open("gloves200.bmp")
pBits = im.convert('RGBA').tostring()
.....
glDrawPixels(200, 200, GL_RGBA, GL_UNSIGNED_BYTE, pBits)
Cela attirera de 200 x 200 patch de pixels sur la toile. Cependant, il n'est pas le but de l'image-- on dirait que c'est le dessin de pixels à partir de la mémoire vive. La mémoire vive hypothèse est étayée par le fait que je reçois le même motif, même lorsque je tente de dessiner entièrement différentes images.Quelqu'un peut-il m'aider? J'utilise Python 2.7 et la version 2.7 de pyopenGL et PIL sur Windows XP.
OriginalL'auteur ahoffer | 2011-07-20
Vous devez vous connecter pour publier un commentaire.
Je pense que vous étiez proche. Essayez:
L'image doit d'abord être converti à RGBA mode pour la RGBA mode brut packer à être disponibles (voir Pack.c dans libimaging). Vous pouvez le vérifier
len(pBits) == im.size[0]*im.size[1]*4
, qui est 200x200x4 = 160 000 octets pour votre gloves200 image.OriginalL'auteur eryksun
Avez-vous essayé d'utiliser la conversion à l'intérieur de la fonction tostring directement?
Vous pouvez également utiliser de compatibilité de version:
Ajout d'une solution de contournement trouvé sur java2s.com/Open-Source/Python/GUI/Python-Image-Library/... pour ma extrait ci-dessus
Je vous remercie pour le travail. Qu'est-ce que la question de la compatibilité. Ai-je été l'exécution de l'ancien code sur la version la plus récente de la bibliothèque?
OriginalL'auteur mikebabcock
Vous remercier pour l'aide. Grâce à mikebabcock pour la mise à jour de l'exemple de code sur le Web. Grâce à eryksun pour l'extrait de code-- je l'ai utilisé dans mon code.
Je n'ai trouver mon erreur et il a été Python newb erreur. Ouch. J'ai déclaré que certaines variables en dehors de la portée de toute fonction dans le module et naïvement pensé que j'étais la modification de leurs valeurs à l'intérieur d'une fonction. Bien sûr, cela ne fonctionne pas et donc mon glDrawPixels appel a été en fait de dessin aléatoire de la mémoire.
OriginalL'auteur ahoffer