c# Bitmap.Enregistrer la transparence n'est pas l'enregistrer en png
J'essaie de sauver une classe Bitmap qui a de la transparence en tant que fichier png avec de la transparence.
Je vais avoir pas de chance.
L'image a de la transparence, il n'a tout simplement pas l'enregistrer avec la transparence.
c'est ce que je fais
bitmap installation
Bitmap ret = new Bitmap(bWidth, bHeight, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
saveing
ret.Save(filename, ImageFormat.Png);
J'ai aussi essayé d'enregistrer le fichier avec un filestream, et qui n'a fait aucune différence.
Lorsque l'image est dans une zone de l'Image la transparence existe, mais lorsque je sauvegarde, je je viens d'obtenir un arrière-plan noir.
Je ne veux vraiment pas utiliser un 3ème partie du code, ils ont trouvé un moyen de le faire, j'aimerais également.
grâce.
Comment êtes-vous de vérifier la transparence de l'image? Si vous êtes à la recherche à dans de la Peinture, il ne supporte pas la transparence.
Je suis sous windows XP "Preview" option et GIMP
Je suis sous windows XP "Preview" option et GIMP
OriginalL'auteur Kelly Elton | 2010-02-05
Vous devez vous connecter pour publier un commentaire.
Êtes-vous sûr que le format de pixel de l'image Bitmap est Système.De dessin.L'imagerie.PixelFormat.Format32bppArgb? Je viens de tombé sur cette question, parce que j'ai eu le même problème, mais c'était parce que j'était en train de charger une image qui n'avait pas de composante alpha de son format de pixel. Je n'ai
et correctement enregistrées de la PNG avec le composant alpha.
Aussi, si vous êtes en utilisant MakeTransparent() assurez-vous que la couleur que vous êtes en rendant transparent en existe un dans votre image.
OriginalL'auteur Brian
Été un moment depuis que j'ai fait de la retouche d'image/sauver, mais si je me souviens bien les Png sont différents de la plupart. Je pense que vous devez utiliser une réelle FileStream.
EDIT: Ah, trouvé un exemple ici
EDIT2: Après plus de recherches sur ce je pense que l'intermédiaire de l'étape est nécessaire uniquement dans certaines circonstances.
Il est également possible que parce que vous êtes à l'aide de "MakeTransparent" c'est de la capture d'un indexés alpha, mais en essayant de sauver sur la base de l'alpha de la valeur de chaque pixel. Vous pouvez essayer de l'établissement les valeurs alpha de l'image.
Édité et ajouté une autre solution possible.
Modifier les valeurs alpha de l'image?
Les pixels. Initialiser toutes les valeurs à 0 alpha, puis éditez-le. Vous pouvez utiliser LockBits.
Je pense que peut-être elle...je vais essayer demain et voir ce qui se passe.
OriginalL'auteur McAden
La raison en est que la
Bitmap
classe ne fonctionne pas avec la transparence.Vous avez besoin de jeter
Bitmap
àImage
.Une fois, j'ai ajouté de la ret.MakeTransparent(De Couleur.Blanc); juste avant l'img.Enregistrer(nom de fichier, ImageFormat.Png); puis mes images PNG avait de la transparence. N'a pas besoin de la fonte.
Casting n'est pas d'ajouter des fonctionnalités.
Image
est juste une classe abstraite, etBitmap
est une implémentation deImage
que t en faveur de la transparence.OriginalL'auteur Anton
OriginalL'auteur mxmissile
Avez-vous essayé d'utiliser Bitmap.MakeTransparent() la méthode?
Pouvez-vous donner plus de code alors? Aussi, ne jamais vous appeler Bitmap.MakeTransparent?
Je ne l'utilisation de l'image Bitmap.MakeTransparent(De Couleur.Transparente) est de savoir comment je le fais. puis-je utiliser la classe Graphics et faites un .Clair(La Couleur.Transparent). Je dessine ensuite les choses avec la classe Graphics, et l'image résultante affiche la transparence dans le programme(dans une zone de l'image), mais lors de l'enregistrement au format png, affiche simplement noir.
Avez-vous essayez de l'enregistrer en tant que Bitmap.Enregistrer("fichier.png")?
:-). Il est généralement une bonne idée de couper&coller votre code ici, plutôt que de taper ce que vous pensez qu'elle est.
OriginalL'auteur
Je voulais juste rappeler à tout le monde que MakeTransparent, comme cela a été suggéré à mes nombreuses personnes ici, seul fait de la couleur spécifique transparent. Il ne prend pas en compte le Canal Alpha de l'argb de l'image. Ainsi, un pixel avec une valeur alpha 100, par exemple, si elle ne correspond pas à la couleur fournie à MakeTransparent, n'aura pas de transparence partielle.
OriginalL'auteur Greg
De la sauvegarde en PNG NÉCESSITE seekable stream comme FileStream ou MemoryStream. Si vous enregistrez dans un de là-bas et obtenir à partir de là, il y aura noe GDI+ exception ou similaire. Espérons que cette aide.
OriginalL'auteur Vlado
Portable Network Graphhics(.png) prend en charge les formats de la transparence, de sorte que, tout en économisant de l'image de définir le format d'image à ImageFormat.Png.
Donc, si l'épargne dans tous les autres formats comme Jpeg... va faire perdre de la transparence. Espérons que cela aide.
OriginalL'auteur Hari
Bien que la Question est très vieux, mais encore ici, le code de travail pour moi.
OriginalL'auteur Gaurav Lal
J'ai supposé que le FilterIndex d'une boîte de dialogue a commencé à 0...mais il en fait commence à 1, de sorte que mes images étaient enregistrées au format Gif en utilisant l'alpha de transparence, et gif ne gère pas la transparence alpha. Donc, mon problème était en fait avec la boîte de dialogue.
OriginalL'auteur Kelly Elton