Динамически обрезать объект BitmapImage

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

1 ответ

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

Результат не BitmapImage, но это все еще в силе ImageSource, который должен быть в порядке, если вы просто хотите отобразить его.


РЕДАКТИРОВАТЬ: на самом деле есть способ сделать это, но это довольно уродливо... Вам нужно создать 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);

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

Другие вопросы по тегам