Преобразовать System.Drawing.Image в System.Windows.Controls.Image? - PullRequest
8 голосов
/ 09 марта 2010

Есть ли способ в C # сделать это преобразование и обратно?

У меня есть приложение WPF с контролем изображения. Я пытаюсь сохранить изображение в этом элементе управления в базу данных SQL.

В моей Entity Model тип данных столбца изображения в моей базе данных - byte[]. Поэтому я нашел способ конвертировать System.Drawing.Image в byte[] и обратно. Но я не нашел способа конвертировать из System.Windows.Controls.Image в byte[].

Так вот почему мне теперь нужно выполнить приведенное выше преобразование.

Ответы [ 2 ]

11 голосов
/ 10 марта 2010

Если у вас есть байтовый массив, представляющий файл, который WPF может декодировать (bmp, jpg, gif, png, tif, ico), вы можете сделать следующее:

BitmapSource LoadImage(Byte[] imageData)
{
    using (MemoryStream ms = new MemoryStream(imageData))
    {
        var decoder = BitmapDecoder.Create(ms,
            BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
        return decoder.Frames[0];
    }
}

Аналогично, чтобы преобразовать его обратно, вы можете сделать следующее:

byte[] SaveImage(BitmapSource bitmap)
{
    using (MemoryStream ms = new MemoryStream())
    {
        var encoder = new BmpBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmap));
        encoder.Save(ms);

        return ms.GetBuffer();
    }
}
3 голосов
/ 09 марта 2010

Ну, один - это изображение, а другой - элемент управления, который показывает изображение, поэтому я не думаю, что между ними есть преобразование. Но вы можете установить Источник ... Controls.Image, чтобы быть вашим ... Drawing.Image.

Редактирование на основе обновления

Делает ли это то, что вам нужно - http://msdn.microsoft.com/en-us/library/ms233764%28VS.100%29.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...