Gracias a WriteableBitmap podemos realizar la manipulación de imágenes en Silverlight 3. En este ejemplo, realizaremos la conversión de la imagen fuente de un control Image a su par en escarla de grises. Aplicaremos una fórmula de conversión a nivel de bytes del pixel (obtenido inicialmente como entero).
void MakeGray(Image img)
{
WriteableBitmap bitmap = new WriteableBitmap(img,null);
for (int y = 0; y < bitmap.PixelHeight; y++)
{
for (int x = 0; x < bitmap.PixelWidth; x++)
{
//obtiene pixel a pixel
int pixelLocation = bitmap.PixelWidth * y + x;
int pixel = bitmap.Pixels[pixelLocation];
byte[] pixelBytes = BitConverter.GetBytes(pixel);
byte bwPixel = (byte)(.299 * pixelBytes[2]
+ .587 * pixelBytes[1]
+ .114 * pixelBytes[0]);
pixelBytes[0] = bwPixel;//b
pixelBytes[1] = bwPixel;//g
pixelBytes[2] = bwPixel;//r
//la posición 3 es el alpha
bitmap.Pixels[pixelLocation] = BitConverter.ToInt32(pixelBytes,0);
}
}
img.Source = bitmap;
}
Referencias:
- WriteableBitmap
- Image
- Procesamiento de imágenes para Dummies :$ con C# y GDI+ (por algo se empieza ^^”)
- http://adamkinney.com/ (un par de tips de esta buena página y también del autor vía Twitter)
Espero haya sido de utilidad
Post.End();
:S assu tanto código para cambiar color :S prefiero photoshop.. no mentira jajja, muy interesante conocer como funciona la herramienta ‘escala de grises’ por dentro, así se pueden hacer modificaciones que las herramientas no permiten
una pregunta respecto a este ejemplo si ya tengo la nueva imagen puedo guardarla en lguna carpeta dentro de un servidor
Hola, ese es un tema que he estado revisando, como sabrás Silverlight no tiene ciertos permisos para realizar ese tipo de proceso. Sin embargo he revisado (hace un mes) un pequeño truco que por motivos de tiempo =/, no he podido publicar. Espero entre esta y la otra semana compartirlo.
. Pronto más novedades!
Gracias por tu visita