2010-09-25 8 views
4

У меня есть объект BitmapImage, который содержит изображение размером 600 X 400. Теперь из моего кода на C# мне нужно создать два новых объекта BitmapImage, скажем objA и objB размером 600 X 200 каждый, так что objA содержит верхнее обрезанное изображение, а objB содержит нижнее обрезанное изображение исходного изображения.Динамически обрезать объект BitmapImage

ответ

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

Результат не BitmapImage, но он по-прежнему в силе ImageSource, которое должно быть хорошо, если вы просто хотите, чтобы отобразить его.


EDIT: на самом деле есть способ сделать это, но это довольно некрасиво ... Вам нужно создать Image управления с оригинальным изображением, и использовать метод WriteableBitmap.Render, чтобы сделать это.

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

Отказ от ответственности: этот код полностью непроверенной;)

+0

Спасибо, но мне нужно использовать код для Silverlight приложения, и я не получаю способ добавить ссылку на CroppedBitmap. Поэтому ваш ответ не помогает мне. – rohits

+0

Извините, я не знал, что этот класс не существует в SL ... –

+0

Я просто посмотрел документацию SL. По-видимому, у него даже нет класса DrawingContext, поэтому я сомневаюсь, что вы можете легко сделать это в SL ... Возможно, вам понадобятся сторонние компоненты –

Смежные вопросы