我必须放置动态生成的图像
var img = new Bitmap(..);
// draw something on img canvas ...
到ToggleButton背景。当我将生成的图像分配给ToggleButton.Content属性时,我看到“System.Drawing.Bitmap”字符串,而不是图像本身。看起来ToString()方法用于Content属性。如何显示生成的图像?
答案 0 :(得分:2)
如果WPF没有合适的转换器它只调用ToString()
方法,则Bitmap格式不合适,您通常想要使用的是Image
,其源为{{1 ,有几种方法可以在不同的格式之间进行转换
以下是一种从BitmapImage
转换为Bitmap
的方法:
BitmapImage
请注意public static BitmapImage BitmapToBitmapImage(System.Drawing.Bitmap bitmap)
{
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
BitmapImage bImg = new System.Windows.Media.Imaging.BitmapImage();
bImg.BeginInit();
bImg.StreamSource = new MemoryStream(ms.ToArray());
bImg.CreateOptions = BitmapCreateOptions.None;
bImg.CacheOption = BitmapCacheOption.Default;
bImg.EndInit();
ms.Close();
return bImg;
}
比未压缩格式慢,但如果有任何格式,它会保留透明度。
现在你应该能够将它用作Image控件的Source,并将此Image控件用作按钮的内容。
答案 1 :(得分:2)
“Content”属性与您在ToggleButton表面上所写的内容有关。您需要初始化UI元素的“Background”属性。这是一个例子:
PixelFormat pf = PixelFormats.Bgr32;
int width = 200;
int height = 200;
int rawStride = (width * pf.BitsPerPixel + 7) / 8;
byte[] rawImage = new byte[rawStride * height];
// Initialize the image with data.
Random value = new Random();
value.NextBytes(rawImage);
// Create a BitmapSource.
BitmapSource bitmap = BitmapSource.Create(width, height, 96, 96, pf, null, rawImage, rawStride);
ImageBrush imgBrush = new ImageBrush(bitmap);
myToggleButton.Background = imgBrush;
我使用以下文章http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapsource(VS.85).aspx
创建了图片