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

  • Автор темы WildDuck
  • Дата начала
Статус
Закрыто для дальнейших ответов.
W

WildDuck

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

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

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

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

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

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

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

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

Код:
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);
}
 
Статус
Закрыто для дальнейших ответов.