Principales respuestas
Cambiar paleta de colores a una imagen

Pregunta
-
Quiero saber si existe alguna forma de cambiarle la paleta de colores a una imagen en C#, es decir, tengo una imagen cualquiera y yo le quiero cambiar la paleta para que solo se componga de ciertos colores.miércoles, 24 de marzo de 2010 3:56
Respuestas
-
Podrías cargar la imagen en un Bitmap y recorrer los pixels uno por uno, con dos bucles anidados que recorran la imagen por filas y columnas. Puedes ir leyendo el color de cada pixel con el método GetPixel, hacer las transformaciones que quieras, y volverlo a asignar con SetPixel. Sin embargo, este procedimiento será bastante lento si la imagen es grande.
- Marcado como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 19 de abril de 2010 14:51
miércoles, 24 de marzo de 2010 8:03Moderador -
eso solo te funciona desde que la imagen originalmente sea una imagen de mapa de bits indexados, que son los que usan paleta de colores, los demas no usan paleta y por tanto no puedes restringir la gama de colores que usa. En estos casos lo mas cercano que podrias hacer es aplicar una matriz de transformacion de color para correr todos los colores a la gama que requieras.
Otra alternativa es que obtengas los bytes de la imagen con BmpData.LockBits los analices y por tu propia cuenta conviertas la imagen en una imagen indexada (es decir que utilice paleta de colores ) de esta forma puedes ya restringir posteriormente los colores de la paleta.
Utilizar una paleta de colores en BMps de 24 bit para arriba es una perdida de tiempo ya que no ahorraras nada ni en espacio ni en rendimiento, por eso no suelen estar soportados sino bmp de 8 bit indexados con paletas de 256 colores...
- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator jueves, 8 de abril de 2010 16:38
- Marcado como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 19 de abril de 2010 14:51
jueves, 8 de abril de 2010 16:38Moderador
Todas las respuestas
-
Podrías cargar la imagen en un Bitmap y recorrer los pixels uno por uno, con dos bucles anidados que recorran la imagen por filas y columnas. Puedes ir leyendo el color de cada pixel con el método GetPixel, hacer las transformaciones que quieras, y volverlo a asignar con SetPixel. Sin embargo, este procedimiento será bastante lento si la imagen es grande.
- Marcado como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 19 de abril de 2010 14:51
miércoles, 24 de marzo de 2010 8:03Moderador -
eso solo te funciona desde que la imagen originalmente sea una imagen de mapa de bits indexados, que son los que usan paleta de colores, los demas no usan paleta y por tanto no puedes restringir la gama de colores que usa. En estos casos lo mas cercano que podrias hacer es aplicar una matriz de transformacion de color para correr todos los colores a la gama que requieras.
Otra alternativa es que obtengas los bytes de la imagen con BmpData.LockBits los analices y por tu propia cuenta conviertas la imagen en una imagen indexada (es decir que utilice paleta de colores ) de esta forma puedes ya restringir posteriormente los colores de la paleta.
Utilizar una paleta de colores en BMps de 24 bit para arriba es una perdida de tiempo ya que no ahorraras nada ni en espacio ni en rendimiento, por eso no suelen estar soportados sino bmp de 8 bit indexados con paletas de 256 colores...
- Propuesto como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator jueves, 8 de abril de 2010 16:38
- Marcado como respuesta Juan Carlos Ruiz PachecoMicrosoft employee, Moderator lunes, 19 de abril de 2010 14:51
jueves, 8 de abril de 2010 16:38Moderador