Pregunta

Así que aquí están los detalles (estoy usando C # BTW):

recibo una imagen de 32 bpp (JPEG comprimido) desde un servidor. En algún momento, me gustaría utilizar la propiedad paleta de un mapa de bits para colorear píxeles saturados sobre el brillo (> 240) de color rojo. Para ello, necesito para obtener la imagen en un formato indexado.

He intentado convertir la imagen a un archivo GIF, pero consigo la pérdida de calidad. He intentado crear un nuevo mapa de bits en formato de índice por estos métodos:

// causes a "Parameter not valid" error
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Indexed)

// no error, but the resulting image is black due to information loss I assume
Bitmap indexed = new Bitmap(orig.Width, orig.Height, PixelFormat.Format8bppIndexed)

Estoy en una pérdida ahora. Los datos en esta imagen se cambia constantemente por el usuario, por lo que no quieren que configurar manualmente los píxeles que tienen una luminosidad> 240 si puedo evitarlo. Si puedo configurar la paleta de una vez cuando se crea la imagen, mi trabajo está hecho. Si voy de este por el camino equivocado, para empezar por favor hágamelo saber.

EDIT: Gracias chicos, aquí tienes más detalles sobre lo que estoy tratando de lograr

.

Estamos examinando una diapositiva tejido en (aplicación patología) alta resolución. Escribo la interfaz con el escáner real. Utilizamos una cámara de líneas. Para probar la velocidad de línea de la cámara, el usuario escanea una porción muy pequeña y se ve en la imagen.

La imagen se muestra al lado de una barra de pista. Cuando el usuario mueve la barra de pista (el ajuste de velocidad de línea), cambio la intensidad global de la imagen en un intento de modelar lo que se vería en la nueva velocidad de línea. Lo hago uso de un objeto ImageAttributes y ColorMatrix actualmente.

Cuando el usuario ajusta la barra de pista, ajusto la matriz. Esto no me da por información de los píxeles, pero el rendimiento es muy agradable. I podría LockBits uso y un poco de código no seguro aquí, pero yo preferiría no volver a escribir, si es posible. Cuando se crea la nueva imagen, me gustaría que todos los píxeles con un valor de brillo de> 240 a ser de color rojo. Estaba pensando que la definición de una gama de colores para el mapa de bits en la delantera sería una forma limpia de hacer esto.

¿Fue útil?

Solución 3

Gracias por la ayuda de todos. Parece que esto se puede solucionar utilizando la clase ImageAttributes y simplemente establecer una tabla de colores de reasignación.

ColorMap[] maps = new ColorMap[someNum]
//  add mappings
imageAttrs.SetRemapTable(maps);

Gracias por la ayuda de nuevo, al menos he aprendido algo.

Otros consejos

El ir de 32 bpp a 8bpp indexado casi siempre como resultado la pérdida de calidad, a menos que la imagen original tiene menos de 256 colores en total.

Se puede crear otra imagen que es una superposición con los píxeles afectada rojo, a continuación, mostrar ambas cosas?

Puesto que usted va para el brillo> 240, puede convertir la superposición a escala de grises primero, y luego a indexada para obtener los píxeles overbright.

No se especifica lo que está haciendo con ella una vez que se ha etiquetado a los delincuentes, por lo que no sabe si eso va a trabajar.

Suena como algo que podría hacer fácilmente con un sombreado de píxeles. Incluso los modelos de sombreado muy tempranas apoyarían algo tan sencillo como esto.

La cuestión es, sin embargo:

Se puede incluir soporte de sombreado en su aplicación sin demasiado sin complicaciones?

¿Conoce la programación de sombreado?

EDIT:

Es probable que no tiene un contexto 3D donde se puede hacer cosas como esta = /

Yo estaba en su mayoría sólo ventilar mis pensamientos.

La manipulación de la imagen píxel a píxel debe ser factible en tiempo real con una sola CPU debe no?

Si no, mira en la programación GPGPU y Open CL.

nuevo EDIT:

Si usted dio algunos detalles más sobre lo que la aplicación en realidad no nos podría ayudar un poco más? Por ejemplo, si usted está haciendo una aplicación Web que ninguno de mis consejos tendría sentido.

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