2008-11-12 29 views
4

在我寫的.NET CF應用程序中,其中一個功能是從遠程攝像頭獲取幀。幀被獲取爲單個jpeg圖像,並在可用時顯示在屏幕上。精簡框架 - Image.FromStream(Stream,Boolean,Boolean)的任何實現?

這是一個足夠好的解決辦法,但我不喜歡的時候需要對數據流轉換爲Image對象,與Bitmap()構造事實,是遠遠遠遠高於下載所需的時間大流。

當我瀏覽一些博客來搜索這個問題時,我發現一些開發人員使用Image.FromStream()方法,該方法有一個validateImageData標誌,它似乎控制了一些驗證代碼。當validateImageData爲false時,轉換速度會大大加快。

好,我以爲....但精簡框架沒有實現這種方法!

任何人都知道如何避開它,或者至少如何將一個流轉換爲Image而沒有不必要的延遲?

回答

1

不知道這是否會有所幫助,但OpenNETCF.Drawing.Imaging有類從流中讀取圖像,但它們是IImage包裝的COM對象。然後可以使用IImage.Draw將其繪製到您的位圖上。它還有一個GetThumbnail方法,用於在設備上獲取大型jpeg的縮放圖像。

Here是Alex Feinman的一篇博客文章。

+0

我不是OpenNETCF的粉絲,但我想我會試試看。謝謝你,馬特。 – castle1971 2009-09-02 13:55:50

1

如果JPEG的尺寸很大(比如1200 x 1600或其他東西),那麼您的設備上使用位圖構造函數時遇到的速度問題之一是必須在內存中創建的位圖大小(位圖也是1200 x 1600,即使它顯示在240 X 320屏幕上)。如果您可以檢索320 X 240而不是全尺寸的JPEG,則位圖創建時間應該少得多。

我找不到除Bitmap構造函數以外的其他缺少的FromStream方法的替代方法。如果您熟悉JPEG格式,我認爲編寫自己的JPEG到BMP轉換器不會太難,但我猜測它不會比Bitmap()更快。

編輯:對不起,我的意思是你自己的壓縮轉換器不會更快地將240×320的JPEG轉換成240×320的位圖。我認爲將大得多的JPEG轉換爲240 X 320位圖可能會快得多,因爲它可以跳過首先創建全尺寸位圖的步驟。

+0

謝謝,但圖像尺寸很小(320x240),但轉換中的性能仍然非常低(按比例)。 – castle1971 2008-12-08 21:52:59