【问题标题】:WPF Image Formats and BindingWPF 图像格式和绑定
【发布时间】:2011-03-17 04:19:33
【问题描述】:

我有一个项目需要将内存中的 System.Drawing.Bitmap 转换为内存中的 BitmapImage,以便我可以通过 XAML 将 BitmapImage 绑定到 Image 控件。我遇到的问题是在转换过程中原始位图缩小并且非常模糊。

这很糟糕,因为原始位图是一个条形码,我需要这个条形码才能保持可读性。我能做些什么来保持位图的完整性吗?或者是否可以在不先保存位图并使用 URI 的情况下将 System.Drawing.Bitmap 绑定到 WPF Image 控件?

还有谁能向我解释所有这些图像格式之间的区别?似乎它们有很多,它们驻留在许多命名空间中,在它们之间进行转换很痛苦。

编辑.....

public static BitmapImage GetBitmapImage(Bitmap bmp)
    {
        MemoryStream ms = new MemoryStream();
        bmp.Save(ms, ImageFormat.Bmp);

        BitmapImage bmpI = new BitmapImage();
        bmpI.BeginInit();
        bmpI.StreamSource = ms;
        bmpI.EndInit();

        ms.Close();
        ms.Dispose();

        return bmpI;
    }

【问题讨论】:

  • 你能发布你用来转换它的代码吗?您是否使用 ValueConverter 来执行此操作?
  • 更新了转换方法。

标签: wpf image xaml


【解决方案1】:

您尝试过不同的位图缩放模式吗?

例如:

Image RenderOptions.BitmapScalingMode="HighQuality" ...

【讨论】:

  • 不,我会试一试。这会阻止位图在转换时被缩小吗?
  • BitmapScalingMode 是放大或缩小图像时使用的调整算法。
  • 我终于搞定了这个问题,但我无法解决任何问题。这应该在哪里实施?
【解决方案2】:

在我看来,摆脱所有这些负担的最简单方法是创建一个用户控件,然后放置一个

WindowsFormsHost

到那个控制。之后你把一个窗体图像放到宿主机上,在用户控件的底层代码中,你可以创建一个依赖属性来绑定数据并更新对图像控件的更改。

干杯。

【讨论】:

  • 你会用图片框作为宿主中的控件吗?
  • 是的,你可以给主机添加一个图片框。
  • 所以我把它连接起来并且它可以工作,但是当我将包含 windowsformhost 的父控件渲染到位图时,不会捕获 windowsformhost 和关联的子位图。这是因为 windowsformshost 不是依赖对象吗?
  • 您能否详细说明“我将包含 windowsformhost 的父控件渲染为位图”。为什么需要将控件渲染到位图。您可以直接将包含 WindowsFormsHost 的用户控件添加到界面中。另外,为了让用户控件支持绑定,可以创建一个依赖属性,类型为Bitmap。
  • 我必须将父控件呈现为位图,因为我将父控件视为标签的容器,该标签将被打印。我遇到的位图问题围绕着一个子元素,即条形码。我做了依赖属性,但我不知道如何将它绑定到图片框的图像属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多