4

我想在图片框中绘制一个 System.Windows.Media.Imaging.BitmapSource。在 WPF 应用程序中,我这样做:

image1.Source =BitmapSource.Create(....................);

但现在我有一个表格。我在我的表单中导入 PresentationCore.dll 以获得 BitmapSource;但是现在我如何在这样的 PictureBox 上绘制或显示它?:

pictureBox1.Image=BitmapSource.Create(.....................);

请帮我。谢谢。

4

3 回答 3

3

为什么你想要/需要使用 wpf 特定的东西?

看看这个片段 如何将 BitmapSource 转换为 Bitmap

Bitmap BitmapFromSource(BitmapSource bitmapsource)
{
    Bitmap bitmap;
    using (MemoryStream outStream = new MemoryStream())
    {
        BitmapEncoder enc = new BmpBitmapEncoder();
        enc.Frames.Add(BitmapFrame.Create(bitmapsource));
        enc.Save(outStream);
        bitmap = new Bitmap(outStream);
    }
    return bitmap;
}

用法:

pictureBox1.Image = BitmapFromSource(yourBitmapSource);

如果要打开图像文件...:

pictureBox1.Image = System.Drawing.Image.FromFile("C:\\image.jpg");
于 2012-08-29T12:49:09.487 回答
0

你可以吗?

ImageSource imgSourceFromBitmap = Imaging.CreateBitmapSourceFromHBitmap(bitmap.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
于 2012-08-30T10:52:01.533 回答
0

此方法具有更好的性能(快两倍)并且需要更少的内存,因为它不会将数据复制到MemoryStream

Bitmap GetBitmapFromSource(BitmapSource source) //, bool alphaTransparency
{
    //convert image pixel format:
    var bs32 = new FormatConvertedBitmap(); //inherits from BitmapSource
    bs32.BeginInit();
    bs32.Source = source;
    bs32.DestinationFormat = System.Windows.Media.PixelFormats.Bgra32;
    bs32.EndInit();
    //source = bs32;

    //now convert it to Bitmap:
    Bitmap bmp = new Bitmap(bs32.PixelWidth, bs32.PixelHeight, PixelFormat.Format32bppArgb);
    BitmapData data = bmp.LockBits(new Rectangle(Point.Empty, bmp.Size), ImageLockMode.WriteOnly, bmp.PixelFormat);
    bs32.CopyPixels(System.Windows.Int32Rect.Empty, data.Scan0, data.Height * data.Stride, data.Stride);
    bmp.UnlockBits(data);
    return bmp;
}
于 2017-11-12T11:49:56.483 回答