2009-08-18 8 views
3

Je sais comment les implémenter, mais ce que je ne sais pas, c'est s'il faut appliquer la transformation pixel par pixel ou y a-t-il une autre façon d'affecter l'image entière, en utilisant un seul appel?Implémentation des filtres Photoshop en C#

AFAIK Get.Set Pixel est très lent. Je ne suis pas sûr qu'ils l'aient fait de cette façon.

Donc, si c'est le filtre en niveaux de gris/désaturés comme un cas simple, comment l'écrirait-on?

+1

Si vous savez comment les mettre en œuvre, je voudrais vous voir demander: « Comment puis-je mettre Photoshop filtres en C# "et répondez-y vous-même avec des exemples, principalement parce que j'aimerais savoir comment :) –

+0

Allumez-le :) –

+1

http://www.codeproject.com/KB/GDI-plus/Image_Processing_Lab.aspx ou http : //www.codeproject.com/KB/GDI-plus/csharpgraphicfilters11.aspx – McAden

Répondre

5

Vous devez verrouiller l'image, puis travailler directement avec la mémoire en ignorant la méthode SetPixel. See here ou mieux encore here

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. 
+0

Merci, je ne savais pas le verrouillage. Qu'est-ce que le verrouillage fait exactement? Le lien ne semble pas aller dans le détail avec la description. Peut-être que le nom de la méthode n'est pas très descriptif? –

+0

Avec cette méthode, faut-il aussi utiliser un code dangereux? –

+1

Il verrouille la mémoire dans un emplacement physique afin que le gestionnaire de mémoire .Net ne puisse pas le déplacer pendant la récupération de place. Oui, cela utilise du code non sécurisé et nécessite une option {} section ou une option de compilation dangereuse. –

1

Afin d'obtenir une performance encore plus rapide, vous pouvez vérifier la mise en œuvre Pixel Effets Shader WPF, Cela fonctionne avec tous les objets visuels .NET WPF, pas seulement les 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/grayscale-effect-pixel-shader-effect-in.html

+0

Merci, c'est un bon exemple.Par curiosité, savez-vous si tous les effets PS sont possibles avec les pixel shaders? Je ne suis pas trop familier avec les pixel shaders, mais je ne sais que pour les effets les plus simples, comme le changement de couleur, –

+1

@Joan Venge Maintenant, avec WPF 4, les effets PS 3.0 peuvent être implémentés, ce qui permet d'écrire des effets très complexes.Visitez l'utilitaire Shazzam Pixel Shader à http://shazzam-tool.com/default.html téléchargez la dernière version et voyez par vous-même le genre d'effets que vous pouvez écrire – luvieere

+0

Thanks man .... –

Questions connexes