2008-08-31 12 views
5

Quelqu'un peut-il conseiller sur la façon de rogner une image, disons jpeg, sans utiliser de constructions de framework .NET, juste des octets bruts? Puisque c'est le seul moyen * dans Silverlight ...Recadrage de l'image C# sans la bibliothèque .net

Ou pointez vers une bibliothèque?

Je ne suis pas concerné par le rendu que je veux manipuler un jpg avant de le télécharger.

* Il n'existe aucune bibliothèque GDI + (System.Drawing) ou WPF (System.Windows.Media.Imaging) disponible dans Silverlight.

LockBits nécessite GDI +, clarifié question

En utilisant FJCore. http://code.google.com/p/fjcore/ pour redimensionner, mais aucun moyen de recadrer :(

Répondre

2

ImageMagick fait un très bon travail Si vous êtes ok avec remettant de tâches d'édition à votre serveur ...

(Sérieusement? La méthode recommandée de manipuler des images dans Silverlight est de travailler avec octets bruts? ... C'est incroyablement boiteux.)

0

où silverlight est-il exécuté? Y a-t-il une raison quelconque d'envoyer une image complète au client pour que le client la recadre? Est-ce que sur le serveur ... (si vous ne créez pas un éditeur d'image qui est ..)

3

Vous pourriez facilement écrire recadrer vous-même en fjcore. Commencez avec le code pour Resizer

http://code.google.com/p/fjcore/source/browse/trunk/FJCore/Resize/ImageResizer.cs

et FilterNNResize - vous pouvez voir comment les données d'image sont stockées - il est juste de simples tableaux de pixels.

La partie importante est la suivante:

for (int y = 0; y < _newHeight; y++) 
    { 
     i_sY = (int)sY; sX = 0; 

     UpdateProgress((double)y/_newHeight); 

     for (int x = 0; x < _newWidth; x++) 
     { 
      i_sX = (int)sX; 

      _destinationData[0][x, y] = _sourceData[0][i_sX, i_sY]; 

      if (_color) { 

       _destinationData[1][x, y] = _sourceData[1][i_sX, i_sY]; 
       _destinationData[2][x, y] = _sourceData[2][i_sX, i_sY]; 
      } 

      sX += xStep; 
     } 
     sY += yStep; 
    } 

vous indique que les données sont stockées dans un réseau de plans de couleur (1 élément de gris 8bpp, 3 éléments pour la couleur), et chaque élément a une matrice 2-D d'octets (x, y) pour l'image.

Vous avez juste besoin de faire défiler les pixels de destination, en les copiant à partir de l'endroit approprié dans la source.

modifier: ne pas oublier de fournir le correctif à l'auteur de fjcore