2010-07-16 94 views
1

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

这是非常糟糕的,因为原始位图是一个条形码,我需要这个条形码来保持可读性。有什么我可以做,以保持我的位图的完整性?或者是否有可能将一个System.Drawing.Bitmap绑定到一个WPF Image控件,而无需先保存该位图并使用一个URI?

也有人可以向我解释所有这些图像格式之间的区别?它们看起来好像有很多,它们驻留在众多的命名空间中,并且在它们之间转换是一种痛苦。

编辑.....

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; 
    } 
+0

你可以发布你用来收敛它的代码吗?你使用ValueConverter来做到这一点吗? – Nate 2010-07-16 21:24:01

+0

更新了转换方法。 – user337816 2010-07-16 21:28:05

回答

1

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

例如:

图片RenderOptions.BitmapScalingMode =“高品质” ......

+0

不,我会试一试。这会阻止位图在转换时向下缩放吗? – user337816 2010-07-16 22:56:28

+0

BitmapScalingMode是图像放大或缩小时使用的调整大小算法。 – 2010-07-16 23:08:03

+0

我终于搞定了这个,我无法解决任何问题。这应该在哪里实施? – user337816 2010-07-19 13:33:13

1

在我看来,要摆脱那些负担的最简单的方法是创建一个用户控件,然后再把

到该控制

WindowsFormsHost

。之后,您将Windows窗体图像添加到主机,并在用户控件的基础代码中,您可以创建依赖项属性来绑定数据并将更改更新到图像控件。

干杯。

+0

你会使用图片框作为主机中的控件吗? – user337816 2010-07-19 21:37:28

+0

是的,你可以添加一个图片框到主机。 – 2010-07-19 22:54:23

+0

所以我得到了这种连线,它的工作原理,但是当我将包含windowsformhost的父控件渲染到位图时,不会捕获windowsformhost和关联的子位图。这是因为windowsformshost不是依赖项对象? – user337816 2010-07-20 02:29:21