Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] CroppedBitmap. Обрезка изображения. (http://forum.oszone.net/showthread.php?t=183450)

Casper-SC 20-08-2010 17:36 1478128

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


Casper-SC 21-08-2010 10:23 1478482

Нашёл решение:
Код:

        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.

Время: 19:06.
© OSzone.net 2001-