Sto scrivendo un'applicazione che richiede di suddividere un'immagine di grandi dimensioni in piccole tessere, in cui ogni riquadro è essenzialmente una versione ritagliata dell'immagine originale.immagine di ritaglio senza copiare
Attualmente la mia operazione di divisione simile a questa
tile.Image = new BitmapImage();
tile.Image.BeginInit();
tile.Image.UriSource = OriginalImage.UriSource;
tile.Image.SourceRect = new Int32Rect(x * tileWidth + x, y * tileHeight, tileWidth, tileHeight);
tile.Image.EndInit();
Intuitivamente, ho pensato che questo creerebbe in pratica un "riferimento" per l'immagine originale, e sarebbe solo visualizzato come un sub rettangolare dell'immagine. Tuttavia, la lenta velocità con cui viene eseguita la mia operazione di split mi ha portato a credere che questo è in realtà copiando il rect sorgente dell'immagine originale, che è molto lento per le immagini di grandi dimensioni (C'è una pausa di 3-4 secondi notevole quando si divide un decente dimensione immagine).
mi sono guardato intorno un po ', ma non sono stati in grado di trovare un modo per disegnare una bitmap come un sub rect di un'immagine di grandi dimensioni, senza copiare tutti i dati. Eventuali suggerimenti?
Avete provato a generare un nuovo 'Bitmap' e copiarlo sul video in esso? Penso che potrebbe essere più veloce di cercare di ritagliare l'immagine in linea. –
La tua classe 'tile' potrebbe memorizzare un riferimento all'immagine originale e un rettangolo da copiare quando si disegna da solo? Graphics.DrawImage ha sovraccarichi per disegnare una porzione di una bitmap: http://msdn.microsoft.com/en-us/library/3tf158xz.aspx – Blorgbeard
Non sono certo un esperto di manipolazione delle immagini, ma non sono sicuro quello che stai chiedendo ha senso. Mentre potrebbe esserci un meccanismo per nascondere la copia, sospetto che i dati dell'immagine debbano essere "riallineati" (copiati) nella memoria in entrambi i casi. – svidgen