2016-08-12 6 views
0

Я программирую WPF (C#) для обработки изображений (в emgu cv). В моем приложении, я открываю изображение, используя следующие коды:Изменение размера нежелательных изображений в растровых изображениях для ImageSource

OpenFileDialog d = new OpenFileDialog(); 

if(d.ShowDialog() == true) 
{ 
    Bitmap b = new Bitmap(d.FileName); 
    img1.Source = Util.Convert(b); 
} 

я использую коды ниже, чтобы преобразовать Bitmap в ImageSource и наоборот:

public static Bitmap ImageSourceToBitmap(ImageSource imageSource) 
{ 
    BitmapSource bitmapSource = (BitmapSource)imageSource; 

    MemoryStream mse = new MemoryStream(); 
    BmpBitmapEncoder encoder = new BmpBitmapEncoder(); 
    encoder.Frames.Add(BitmapFrame.Create(bitmapSource)); 
    encoder.Save(mse); 

    System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(mse); 

    return bitmap; 
} 

public static BitmapImage Convert(Bitmap src) 
{ 
    MemoryStream ms = new MemoryStream(); 
    ((System.Drawing.Bitmap)src).Save(ms, System.Drawing.Imaging.ImageFormat.Png); 

    BitmapImage image = new BitmapImage(); 
    image.BeginInit(); 
    ms.Seek(0, SeekOrigin.Begin); 
    image.StreamSource = ms; 
    image.EndInit(); 
    return image; 
} 

Размер изображения будет изменен (странное поведение произошел при моем преобразовании), когда я использую его с помощью кнопки. код событие кнопки:

Image<Gray, byte> im = new Image<Gray, byte>(Util.ImageSourceToBitmap(img1.Source)); 
im._EqualizeHist(); 

img1.Source = Util.Convert(im.Bitmap); 

Я также установил stretch = None.

В чем проблема?

ответ

0

Что вы видите на картинке? Это может привести к изменению размера. Обычно я использую холст и масштабирование, поэтому мое изображение всегда одного размера.

Вы конверсии выглядите «странно» для меня. Попробуйте следующие методы: Convert Bitmaps

Поскольку BitmapImage является производным от BitmapSource, это должно сработать для вас. Я подозреваю, что это будет быстрее.

Doug