2010-09-25 5 views
4

J'ai un objet BitmapImage qui contient une image de 600 X 400 dimensions. Maintenant, à partir de mon code C# derrière, j'ai besoin de créer deux nouveaux objets BitmapImage, disons objA et objB de 600 x 200 chacun de sorte que objA contienne l'image recadrée moitié supérieure et objB contient l'image recadrée moitié inférieure de l'image originale.Rognage dynamique d'un objet BitmapImage

Répondre

5
BitmapSource topHalf = new CroppedBitmap(sourceBitmap, topRect); 
BitmapSource bottomHalf = new CroppedBitmap(sourceBitmap, bottomRect); 

Le résultat est pas un BitmapImage, mais il est encore un ImageSource valide, qui devrait être OK si vous voulez juste pour l'afficher.


EDIT: En fait, il y a une façon de le faire, mais il est assez laid ... Vous devez créer un contrôle Image avec l'image originale, et utiliser la méthode WriteableBitmap.Render pour le rendre.

Image imageControl = new Image(); 
imageControl.Source = originalImage; 

// Required because the Image control is not part of the visual tree (see doc) 
Size size = new Size(originalImage.PixelWidth, originalImage.PixelHeight); 
imageControl.Measure(size); 
Rect rect = new Rect(new Point(0, 0), size); 
imageControl.Arrange(ref rect); 

WriteableBitmap topHalf = new WriteableBitmap(originalImage.PixelWidth, originalImage.PixelHeight/2); 
WriteableBitmap bottomHalf = new WriteableBitmap(originalImage.PixelWidth, originalImage.PixelHeight/2); 

Transform transform = new TranslateTransform(); 
topHalf.Render(originalImage, transform); 
transform.Y = originalImage.PixelHeight/2; 
bottomHalf.Render(originalImage, transform); 

Avertissement: ce code est complètement non testé;)

+0

Merci, mais je dois utiliser le code pour une application Silverlight et je ne reçois pas un moyen d'ajouter une référence à CroppedBitmap. Votre réponse ne m'aide donc pas. – rohits

+0

Désolé, je ne savais pas que cette classe n'existe pas en SL ... –

+0

Je viens de jeter un oeil à la documentation SL. Apparemment, il n'a même pas la classe DrawingContext, donc je doute que vous puissiez facilement le faire en SL ... Vous aurez probablement besoin de composants tiers –

Questions connexes