Question

Je sais comment les mettre en œuvre, mais ce que je ne sais pas est d'appliquer ou non le pixel de transformation par pixel ou est-il une autre façon d'affecter l'image, en utilisant un seul appel, etc?

Get.Set Pixel est AFAIK très lent. Je ne sais pas s'ils l'ont fait ainsi.

Donc, si c'est le filtre en niveaux de gris / désaturer comme un simple cas, comment peut-on écrire?

Était-ce utile?

La solution

Vous devez verrouiller l'image, puis travailler avec la mémoire sans passer directement méthode SetPixel. Voir ici ou mieux encore ici

Pour examle vous pouvez définir la couleur bleue à 255 comme suit

   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.

Autres conseils

Afin d'obtenir une performance encore plus rapide, vous pouvez vérifier la mise en œuvre Pixel Shader Effets de WPF, qui fonctionne avec tous les objets visuels WPF .NET, et pas seulement des images.

Jetez un oeil à un article expliquant certaines étapes de mise en œuvre de base pour un tel effet:

http: //bursjootech.blogspot. com / 2008/06 / niveaux de gris-effet pixel-shader effet in.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top