Comment obtenir les couleurs « vrais » lors de l'exportation d'un dessin GDI à bmp
-
02-10-2019 - |
Question
Je développe un gestionnaire Web ASP.Net que les images retours faisant un System.Windows.Forms.Control
en mémoire, puis exporte le contrôle rendu sous forme de bitmap compressés en PNG, en utilisant la méthode DrawToBitmap()
. Les classes travaillent maintenant pleinement, à l'exception d'un problème avec l'attribution des couleurs. Par exemple, ceci est une jauge générée par le gestionnaire Web.
Les couleurs attribuées aux parties intérieures de la jauge sont rouges (#FF0000
), jaune (#FFFF00
) et vert (#00FF00
) mais je ne reçois que une version sourdement de chaque couleur (#CB100F
pour le rouge, #CCB70D
pour le jaune et #04D50D
pour le vert ).
L'arrière-plan est un fichier BMP contenant le gradient de couleur. La perte de couleur se produit si l'arrière-plan est un gradient que l'échantillon, une toile noire, une toile blanche, une toile transparente, même quand il n'y a pas un ensemble de fond.
- Avec fond noir
- Avec fond transparent
- Avec un fond blanc
- Sans un ensemble de fond
- Avec le format de pixel dans Format32bppArgb
J'ai essayé plusieurs couleurs deeps bitmap, les formats de sortie, niveau de compression, etc., mais aucun d'entre eux ne semble fonctionner. Toutes les idées?
Ceci est un extrait du code source:
Bitmap bmp = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format32bppPArgb);
Image bgimage = (Image) HttpContext.GetGlobalResourceObject("GraphicResources", "GaugeBackgroundImage");
Canvas control_canvas = new Canvas(); //inherits from Control
....
//the routine that makes the gauge
....
control_canvas.DrawToBitmap(bmp, new Rectangle(0, 0, w, h));
La solution 4
Toile était une classe fournie par un tiers. Nous avons trouvé un bug dans leur emballage, ils ont sorti une nouvelle version, et le problème a finalement été résolu. Merci quand même pour votre temps!
Autres conseils
Lorsque vous peignez les couleurs, assurez-vous que le canal alpha est correctement réglée ainsi. Si vous avez une certaine alpha, il se mélange avec ce fond sombre et vous donner une couleur plus foncée.
Avez-vous essayé cela avec seulement PNGs? J'ai frappé ce problème avec PNGs (ou JPEGS?) Dans un navigateur il y a longtemps, mais IIRC GIFs éliminé le problème:
Notez que je ne dis pas que GIFs résoudra votre problème à long tort, mais il peut vous dire si l'écriture PNG / lecture est le problème. Essayez, essayez BMP, essayer quelque chose. Ne croyez pas le PNG. Vous pouvez essayer de mettre les valeurs r g b dans un fichier journal (ou sur le disque comme matières premières et l'importation dans Photoshop et) voir quels sont les chiffres avant d'écrire le bitmap. (Utilisez LockBits , il y a des tutoriels pour le code sur l'obtention d'octets dans et hors de bitmaps).
Je viens de réaliser que vous avez vraiment lumineux pièces jaunes sur ce pointeur triangle, de sorte que le problème est probablement avec l'image d'arrière-plan. Dessines-tu ces arcs avec des primitives ou le chargement d'un bitmap? Vous pourriez avoir des problèmes gamma, les problèmes d'espace de couleurs, etc. en fonction du format d'entrée, en supposant que vous utilisez une image pour la partie mètres rouge / jaune / vert. Essayez de dessiner ces formes dans le code si vous utilisez une image. Quel que soit le code rend le triangle jaune obtient les couleurs vives, donc utiliser le même format d'image ou d'un pinceau ou tout ce qui fait le travail triangle jaune.