2010-07-16 88 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