2008-08-31 15 views
5

Qualcuno può consigliare su come ritagliare un'immagine, diciamo jpeg, senza utilizzare alcun costrutto .NET framework, solo byte grezzi? Poiché questo è l'unico * modo in Silverlight ...Raccolta immagini C# senza libreria .net

Oppure indicare una biblioteca?

Non mi interessa il rendering, voglio manipolare un jpg prima di caricarlo.

* Non ci sono librerie GDI + (System.Drawing) o WPF (System.Windows.Media.Imaging) disponibili in Silverlight.

LockBits richiede GDI +, chiarita questione

Utilizzando fjcore:. http://code.google.com/p/fjcore/ per ridimensionare, ma nessun modo per ritagliare :(

risposta

2

ImageMagick fa un buon lavoro Se sei ok con consegnare a mano operazioni di editing per il vostro server ...

(Sul serio? Il modo consigliato di manipolare le immagini in Silverlight è di lavorare con byte prime? Questo è ... incredibilmente zoppo.)

0

dove viene eseguita Silverlight? C'è qualche motivo per inviare un'immagine completa al client per far ritagliare il client? farlo sul server ... (se non si sta creando un editor di immagini che è ..)

3

Si potrebbe facilmente scrivere il ritaglio in fjcore. Inizia con il codice per Resizer

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

e FilterNNResize - si può vedere come i dati dell'immagine vengono memorizzati - è solo semplici array di pixel.

La parte importante è:

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

si mostra che i dati sono memorizzati in un array di piani di colore (1 elemento per 8bpp grigio, 3 elementi per colore) e ogni elemento ha una matrice 2-D di byte (x, y) per l'immagine.

È sufficiente scorrere i pixel di destinazione, quindi copiare dalla posizione appropriata nella fonte.

modifica: non dimenticare di fornire la patch all'autore di fjcore