Wpf отображение Bitmap-а

Тема в разделе ".NET", создана пользователем WildDuck, 20 янв 2010.

Статус темы:
Закрыта.
  1. WildDuck

    WildDuck Гость

    Добрый день! Проблема достаточно простая но бьюсь уже весь день,
    т.к. с wpf столкнулся неделю назад... (wpf 3.5)

    Есть Resources.resx с картинками, стоит "флажок" "Embedded Resource"
    все вроде нормально... вопрос:
    Как затолкать картинку в Content кнопки?

    пробовал так...
    Код (Text):
    btn1.Content = MyRes.Resources.Mini;
    я понимаю что эта конструкция скорей всего не правильная,
    пишет что не может с конвертировать Bitmap в BitmapSource...
    Может есть какой нибудь конвертер? или какой нибудь другой способ?

    пробовал еще так
    Код (Text):
    Uri uri = new Uri("pack://application:,,/Resources/mini.jpg");
    BitmapImage bitmap = new BitmapImage(uri);
    Image img = new Image();
    img.Source = bitmap;
    видимо что тоже неправильно....

    кто нибудь знает способ как это сделать? Спасибо!

    Добавлено: Решил проблему следующим образом!

    Код (Text):
    Image img = new Image();
    img.Source = ToBitmapSource(MyRes.Resources.Mini);
    btn1.Content = img;
    функцию ToBitmapSource позаимствовал с сайта
    http://www.rsdn.ru/forum/dotnet.gui/3645067.flat.aspx

    немного упростил конструкцию нежели была предложена...

    Код (Text):
    public BitmapSource ToBitmapSource(System.Drawing.Bitmap source)
    {
    double _dpiX;
    double _dpiY;
    int _height;
    int _width;
    byte[] _pixels;

    _dpiX = source.HorizontalResolution;
    _dpiY = source.VerticalResolution;
    _height = source.Height;
    _width = source.Width;

    System.Drawing.Imaging.PixelFormat pf = source.PixelFormat;

    // if (pf != System.Drawing.Imaging.PixelFormat.Format32bppArgb)
    //   source = source.ConvertTo(System.Drawing.Imaging.PixelFormat.Format32bppArgb, null);

    System.Windows.Media.PixelFormat _pf = System.Windows.Media.PixelFormats.Bgra32;
    _pixels = new byte[_width * _height * 4];

    System.Drawing.Imaging.BitmapData bmData = source.LockBits(
    new System.Drawing.Rectangle(0, 0, _width, _height),
    System.Drawing.Imaging.ImageLockMode.ReadWrite,
    System.Drawing.Imaging.PixelFormat.Format32bppArgb
    );

    int strideBM = bmData.Stride;
    System.IntPtr Scan0 = bmData.Scan0;

    unsafe
    {
    byte* p = (byte*)(void*)Scan0;
    int offset = 0;
    for (int j = 0; j < _height; j++)
    {
    int offsetBM = strideBM * j;
    for (int i = 0; i < _width; i++)
    {
    _pixels[offset++] = p[offsetBM++];//blue
    _pixels[offset++] = p[offsetBM++];//green
    _pixels[offset++] = p[offsetBM++];//red
    _pixels[offset++] = p[offsetBM++];//alfa
    }
    }
    }

    source.UnlockBits(bmData);

    return System.Windows.Media.Imaging.BitmapSource.Create(
    _width, _height, _dpiX, _dpiY, System.Windows.Media.PixelFormats.Bgra32, null, _pixels, _width * 4);
    }
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей