将位图显示为图像
本文关键字:图像 显示 位图 | 更新日期: 2023-09-27 18:14:54
我有qrcode生成器(我使用ZXing.QrCode)
public Bitmap GenerateQR(int width, int height, string text)
{
var bw = new ZXing.BarcodeWriter();
var encOptions = new ZXing.Common.EncodingOptions() { Width = width, Height = height, Margin = 0 };
bw.Options = encOptions;
bw.Format = ZXing.BarcodeFormat.QR_CODE;
var result = new Bitmap(bw.Write(text));
return result;
}
现在我想在新窗口中显示qr码,所以我调用:
var window = new Zeszycik.View.show(GenerateQR(300,300,"some txt"));
window.Show();
但是我不知道如何在新窗口显示qrcode
public show(Bitmap qrcode)
{
InitializeComponent();
print(qrcode);
}
private void print(Bitmap img)
{
image.Source = img; //error
}
图像源属性的类型是 ImageSource
,但 Bitmap
不派生自ImageSource,所以你需要将其转换为ImageSource的一个实例,可以是 BitmapImage
或 BitmapSource
。
现在,要将Bitmap转换为BitmapSource,您可以参考此链接在这里。为了回答的完整性,我将从这里的链接发布答案:
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);
private BitmapSource Bitmap2BitmapSource(Bitmap bitmap)
{
IntPtr hBitmap = bitmap.GetHbitMap();
BitmapSource retval;
try
{
retval = Imaging.CreateBitmapSourceFromHBitmap(
hBitmap,
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
finally
{
DeleteObject(hBitmap); //Necessary to avoid memory leak.
}
return retval;
}
现在你可以像这样设置图片来源:
image.Source = Bitmap2BitmapSource(img);