Pregunta

Yo sé cómo ponerlas en práctica, pero lo que no sé es si se debe aplicar la transformación píxel a píxel o hay otra manera de afectar a toda la imagen, utilizando una sola llamada, etc?

Que yo sepa Get.Set Pixel es muy lento. No estoy seguro de si lo hicieron de esta manera.

Así que si es la escala de grises / desaturar filtro como un simple caso, ¿cómo se escribirlo?

¿Fue útil?

Solución

Hay que cerrar la imagen y luego trabajar con la memoria sin pasar directamente método SetPixel. Vea aquí o incluso mejor aquí

Para examle puede configurar el color azul a 255 de la siguiente manera

   BitmapData bmd=bm.LockBits(new Rectangle(0, 0, 10, 10), System.Drawing.Imaging.ImageLockMode.ReadOnly, bm.PixelFormat);
      int PixelSize=4;
      for(int y=0; y<bmd.Height; y++)
      {
        byte* row=(byte *)bmd.Scan0+(y*bmd.Stride);
        for(int x=0; x<bmd.Width; x++)
        {
          row[x*PixelSize]=255;
        }
      } // it is copied from the last provided link.

Otros consejos

Con el fin de lograr un rendimiento aún más rápido, es posible que desee echa un vistazo a la aplicación del pixel efectos de sombreado de WPF, que funciona con todos los objetos visuales .NET WPF, no sólo imágenes.

Tome un vistazo a un artículo que explica algunos pasos básicos de implementación para tal efecto:

http: //bursjootech.blogspot. com / 2008/06 / escala de grises-efecto-pixel-shader-efecto-in.html

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