J'ai besoin de charger un jpeg-> dessiner un rectangle semi-transparent-> enregistrer le fichier jpeg en utilisant wx.Bitmap du paquetage python wx. Mais le rectangle semble complètement opaque. J'utilise Windows 7 avec 32bpp. J'ai vérifié et essayé la démo "Docs and Demos \ demo \ AlphaDrawing.py", et cela fonctionne bien. Il dessine correctement sur wx.Panel un rectangle semi-transparent.Dessiner un rectangle semi-transparent sur un fichier jpeg avec wx.Bitmap
J'ai vérifié sur Internet pour trouver une solution à ce problème, mais aucune des solutions n'a fonctionné.
J'ai créé un exemple plus simple, pour minimiser les possibilités d'erreur, et ne fonctionnait toujours pas. Charger un JPG-> dessiner un rectangle- semi-transparent> enregistrer en tant que fichier jpg
wimg = wx.Image(r"N:\Images\Wallpapers\Processed\a.jpg", wx.BITMAP_TYPE_JPEG)
print wimg.HasAlpha()
wimg.InitAlpha()
print wimg.HasAlpha()
bmp = wimg.ConvertToBitmap()
print bmp.HasAlpha()
dc = wx.MemoryDC(bmp)
r, g, b = (34, 34, 34)
dc.SetPen(wx.Pen(wx.Colour(r, g, b, wx.ALPHA_OPAQUE)))
dc.SetBrush(wx.Brush(wx.Colour(r, g, b, 128)))
dc.DrawRectangle(100, 300, 200, 200)
bmp.SaveFile(r"N:\Images\Wallpapers\Processed\b.jpg", wx.BITMAP_TYPE_JPEG)
Les résultats d'impression sont: Faux/Vrai/Vrai Et toujours la sortie, il est un rectangle complètement opaque
I jpeg connu n'a pas de canaux alpha, mais je ne veux pas un jpeg 32bpp. Juste la sortie pour montrer le rectangle mélangé avec l'arrière-plan.
Bon point! J'ai lu la documentation et cela correspond à ce que vous mentionnez. Mais, maintenant j'ai fait quelques tests en chargeant 32bpp .png et .bmp en utilisant Windows 7. Et en fait les résultats sont le contraire. Si je fais: impression wimg.HasAlpha() bmp = wimg.ConvertToBitmap() impression bmp.HasAlpha() je reçois vrai deux fois le chargement .bmp et faux sur le .png Mais encore doesn Ne résout pas mon problème. Je vais mettre à jour le post, pour refléter le vrai problème: Dessiner un rectangle semi-transparent sur un fichier jpeg –