InteropBitmap для BitmapImage - PullRequest
       26

InteropBitmap для BitmapImage

5 голосов
/ 14 марта 2010

Я пытаюсь преобразовать Bitmap (SystemIcons.Question) в BitmapImage, чтобы использовать его в элементе управления WPF-изображением.

У меня есть следующий метод для преобразования его в BitmapSource, но он возвращает InteropBitmapImage, теперь проблема заключается в том, как преобразовать его в BitmapImage. Прямое приведение не работает.

Кто-нибудь знает, как это сделать?

КОД:

 public BitmapSource ConvertToBitmapSource()
        {
            int width = SystemIcons.Question.Width;
            int height = SystemIcons.Question.Height;
            object a = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(SystemIcons.Question.ToBitmap().GetHbitmap(), IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromWidthAndHeight(width, height));

            return (BitmapSource)a;
        }

свойство для возврата BitmapImage: (привязано к моему управлению изображениями)

public BitmapImage QuestionIcon
        {
            get
            {
                return  (BitmapImage)ConvertToBitmapSource();
            }
        }

Ответы [ 3 ]

8 голосов
/ 14 марта 2010

InteropBitmapImage наследуется от ImageSource, поэтому вы можете использовать его непосредственно в Image элементе управления. Вам не нужно, чтобы это было BitmapImage.

1 голос
/ 14 марта 2010

Вы должны быть в состоянии использовать:

    public BitmapImage QuestionIcon
    {
        get
        {
            using (MemoryStream ms = new MemoryStream())
            {
                System.Drawing.Bitmap dImg = SystemIcons.ToBitmap();
                dImg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                System.Windows.Media.Imaging.BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage();
                bImg.BeginInit();
                bImg.StreamSource = new MemoryStream(ms.ToArray());
                bImg.EndInit();
                return bImg;
            }
        }
    }
0 голосов
/ 07 апреля 2017
public System.Windows.Media.Imaging.BitmapImage QuestionIcon
{
    get
    {
        using (MemoryStream ms = new MemoryStream())
        {
            System.Drawing.Bitmap dImg = SystemIcons.ToBitmap();
            dImg.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
            ms.Position = 0;
            var bImg = new System.Windows.Media.Imaging.BitmapImage();
            bImg.BeginInit();
            bImg.StreamSource = ms;
            bImg.EndInit();
            return bImg;
        }
    }
}
...