Domanda

Io so come implementare loro, ma quello che non so è se applicare il pixel per pixel trasformazione o c'è un altro modo per influenzare l'intera immagine, utilizzando una singola chiamata, etc?

Per quanto ne sappia Get.Set Pixel è molto lenta. Non sono sicuro se lo hanno fatto in questo modo.

Quindi, se è la scala di grigi / desaturare filtro come un caso semplice, come si potrebbe scriverlo?

È stato utile?

Soluzione

È necessario per bloccare l'immagine e poi lavorare con la memoria bypassando direttamente metodo SetPixel. Vedi qui o ancora meglio qui

Per examle è possibile impostare il colore blu a 255 come segue

   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.

Altri suggerimenti

Al fine di ottenere una performance ancora più veloce, si consiglia di controllare l'attuazione Pixel Shader Effects di WPF, che funziona con tutti gli oggetti visivi .NET WPF, non solo immagini.

Date un'occhiata a un articolo che spiega alcuni passaggi fondamentali di attuazione per un tale effetto:

http: //bursjootech.blogspot. com / 2008/06 / in scala di grigi-effetto-pixel-shader di effetto-in.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top