 |
|
CroppedBitmap. Обрезка изображения.
Здравствуйте. Вот например у меня есть изображение на image. Мне нужно обрезать его часть и вернуть не BitmapSource, а BitmapImage. У меня ничего не получается. Как это можно сделать? Вот несколько осмысленных кусков кода из приложения.
Код:
//Глобальные переменные в статическом классе
private static BitmapImage bitmapImg;
private static System.Windows.Controls.Image image;
.......
//код из метода
Int32Rect rectangle = new Int32Rect();
//тут манипуляции с rectangle
.......
//и далее обрезание изображения
CroppedBitmap cb = new CroppedBitmap((BitmapSource)image.Source, rectangle); //Обрезаем нужную часть изображения
Image imageCropped = new Image();
imageCropped.Source = cb;
BitmapSource bitmapSource = (BitmapSource)imageCropped.Source; //это я просто пробовал, толку от этой строки нету
Это мне нужно для сохранения изображения в файл таким образом, как видите в качестве параметра тут получаем BitmapImage :
Код:
public static class ImageSaver
{
public static void SaveInJpeg(BitmapImage bmp, String Path, int Quality)
{
FileStream fileStream = new FileStream(Path, FileMode.CreateNew, FileAccess.Write, FileShare.None);
JpegBitmapEncoder jpgEncoder = new JpegBitmapEncoder();
jpgEncoder.QualityLevel = Quality;
jpgEncoder.Frames.Add(BitmapFrame.Create(bmp));
jpgEncoder.Save(fileStream);
fileStream.Close();
}
}
|
Нашёл решение:
Код:
public static BitmapImage BitmapSourceToBitmapImage(BitmapSource bitmapSource)
{
PngBitmapEncoder encoder = new PngBitmapEncoder();
MemoryStream memoryStream = new MemoryStream();
BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage();
encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
encoder.Save(memoryStream);
bImg.BeginInit();
bImg.StreamSource = new MemoryStream(memoryStream.ToArray());
bImg.EndInit();
memoryStream.Close();
return bImg;
}
|
Время: 19:06.
© OSzone.net 2001-