Pregunta

Estoy desarrollando un controlador web ASP.Net que devuelve imágenes haciendo un System.Windows.Forms.Control en memoria y luego exporta el control representa como un mapa de bits comprimido a PNG, usando el método DrawToBitmap(). Las clases están funcionando plenamente por ahora, excepto por un problema con la asignación de colores. Por ejemplo, este es un Gauge generada por el controlador de web.

El indicador

Los colores asignados a las partes internas del medidor sean rojos (#FF0000), amarillo (#FFFF00) y verde (#00FF00), pero solo me dan una versión debidamente de cada color (#CB100F para el rojo, #CCB70D para el amarillo y #04D50D para el verde ).

El fondo es un archivo BMP que contiene el gradiente de color. La pérdida de color sucede si el fondo es una pendiente que la muestra, un lienzo negro, un lienzo en blanco, un lienzo transparente, incluso cuando no hay un conjunto de antecedentes.

  • Con fondo negro

Con fondo negro

  • Con fondo transparente

con un fondo transparente

  • Con un fondo blanco

Con un fondo blanco

  • Sin un conjunto de fondo

Sin un conjunto de fondo

  • Con el formato de píxel en Format32bppArgb

Con PixelFormat Format32bppArgb

He intentado varias profundidades de mapa de bits de color, formatos de salida, nivel de compresión, etc., pero ninguno de ellos parece funcionar. Algunas ideas?

Este es un extracto del código fuente:

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));
¿Fue útil?

Solución 4

Canvas era una clase proporcionada por un tercero. Hemos encontrado un error en su paquete, se lanzó una nueva versión, y el problema se resolvió finalmente. Gracias de todos modos por su tiempo!

Otros consejos

Al pintar los colores, comprobar para asegurarse de que el canal alfa se ha ajustado correctamente también. Si tiene alguna alfa que se mezcla con el fondo oscuro y darle un color más oscuro.

¿Has intentado esto con sólo PNG? Golpeé este problema con los archivos PNG o JPEG (?) En un navegador hace mucho tiempo, pero IIRC GIF eliminado el problema:

Tenga en cuenta que no estoy diciendo que los GIF va a resolver su problema a largo mal pero puede decirle si el PNG escritura / lectura es el problema. Probarlo, intente BMP, probar algo. No creo que el PNG. Usted podría tratar de vertido los valores R G B a un archivo de registro (o en el disco como prima e importar en Photoshop y) ver cuáles son los números antes de escribir el mapa de bits. (Uso LockBits ; hay tutoriales para código de bytes en conseguir dentro y fuera de mapas de bits).

Me acabo de dar cuenta de que tiene partes amarillas muy brillantes en ese puntero triángulo, por lo que el problema es probable que la imagen de fondo. Estás dibujando los arcos con las primitivas o cargar un mapa de bits? Usted podría tener problemas gamma, los problemas de espacio de color, etc., dependiendo del formato de entrada, suponiendo que está utilizando una imagen de la parte del medidor de color rojo / amarillo / verde. Intenta dibujar esas formas en el código si está utilizando una imagen. Cualquier código que hace que el triángulo amarillo está recibiendo los colores brillantes, a fin de utilizar el mismo formato de imagen o cepillo o lo que hace que el trabajo triángulo amarillo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top