2008-08-31 19 views
5

Czy ktoś może doradzić, jak przyciąć obraz, powiedzmy jpeg, bez używania jakichkolwiek konstrukcji szkieletowych .NET, tylko surowe bajty? Ponieważ jest to jedyny * sposób w Silverlight ...Cięcie obrazu C# bez biblioteki .net

Albo wskazywać na bibliotekę?

Nie przejmuję się renderowaniem, że chcę manipulować jpg przed przesłaniem.

* Brak bibliotek GDI + (System.Drawing) lub WPF (System.Windows.Media.Imaging) dostępnych w Silverlight.

Lockbits wymaga GDI +, wyjaśnić pytanie

Korzystanie fjcore. http://code.google.com/p/fjcore/ do zmiany rozmiaru, ale nie da się przyciąć :(

Odpowiedz

2

ImageMagick robi bardzo dobrą robotę Jeśli jesteś ok z oddaniem zadań edycyjnych do listy serwer ...

(Poważnie? Zalecanym sposobem manipulowania obrazy w Silverlight jest praca z surowego bajtów? to ... niewiarygodnie lame.)

0

gdzie wykonano silverlight? Czy jest jakikolwiek powód, aby wysłać klientowi kompletny obraz, aby klient go przyciął? Czy to na serwerze ... (jeśli nie tworzą edytor zdjęć, który jest ..)

3

Możesz łatwo zapisać upraw w FJcore. Zacznij z kodem dla Resizer

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

i FilterNNResize - można zobaczyć, jak dane obrazu są przechowywane - to tylko proste tablice pikseli.

Ważną częścią jest:

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; 
    } 

pokazuje, że dane są przechowywane w tablicy płaszczyzn koloru (1 element 8bpp szary, 3 elementy dla koloru), a każdy element ma szereg 2-D bajtów (x, y) dla obrazu.

Wystarczy przeplecić docelowe piksele, a następnie skopiować je z odpowiedniego miejsca w źródle.

Edytowanie: nie zapomnij podać łaty autorowi fjcore