2011-04-24 42 views
4

我想讓用戶捕捉圖像並使用圖像將其添加到屏幕上。但是,由於內存限制,我還需要將此圖像調整爲大約一半尺寸(12x 500萬像素在手機上絕對不行)。調整生成相機流的大小

我正在啓動相機任務,它會調用Completed事件。但是,當我嘗試使用DecodeJpeg時,出現「參數不正確」。例外。

這裏是我的代碼調整大小,其中mx和我的尺寸爲int。我已經驗證,有一些在e.ChosenPhoto約5500〜長度:

WriteableBitmap bitmap = PictureDecoder.DecodeJpeg(e.ChosenPhoto, mx, my); 
Image img = new Image(); 
img.Source = bitmap; 

第一行是在應用程序崩潰。有任何想法嗎?

編輯: 這也會發生在PhotoChooserTask結果....

+0

當它崩潰時會發生什麼?拋出什麼異常? – 2011-04-25 10:41:01

回答

4

嘗試使用System.Windows.Media.Imaging - Extensions.LoadJpeg方法而不是PictureDecoder.DecodeJpeg。還要確保該流位於流的開始位置。如果您已經使用的流則需要使用重置密碼:

MyImageStream.Seek(0, System.IO.SeekOrigin.Begin) 

我有很多的試圖訪問原始圖像的問題,尤其是因爲BitmapImage的automatically resizes images over 2000x2000。如果你想要一個形象大於2000x2000大,你必須訪問原始數據流,如果你想看到一些更復雜的圖像處理代碼,包括使用ExifLib從圖像流檢測分辨率,並使用旋轉流將其加載到WriteableBitmap object

WriteableBitmap Extensions檢查了類爲Silverlight ZXing Library

UPDATE:由於您只是想調整給定e.ChosenPhoto結果的圖像大小,我從Silverlight ZXing庫中取出了代碼。這應該工作:

WriteableBitmap wbBarcodeImage = new WriteableBitmap(mx, my); 
Extensions.LoadJpeg(wbBarcodeImage, e.ChosenPhoto);//Load JPEG from stream into our re-sized writeable bitmap 

請注意,您需要使用正確的高度/寬度比,否則就會在圖像的底部或一側的黑條。您可以使用ExifLib檢測原始圖像大小並使用它來縮放(請參閱上面鏈接的BarcodeCaptureResult中的GetWriteableBitmap方法)

+0

從我在文檔中看到的,LoadJpeg不允許我調整圖像大小(反正需要在2k * 2k以下),但我會嘗試重置流。不過,我從來沒有使用過它。 – 2011-04-26 22:32:52

+0

如果您只想將圖片加載到小於2000x2000的圖像中,則只需使用如下所示的BitmapImage:http://www.ginktage.com/2011/04/using-the-cameracapturetask-in-windows -phone-7 /然後您可以使用WriteableBitmap來調整其大小或使用ScaleTransform http://blogs.msdn.com/b/mikeormond/archive/2010/12/09/resizing-images-in-windows-phone- 7.aspx – 2011-04-26 22:35:27

+0

我需要能夠控制大小,所以只使用WriteableBitmap將不起作用。現在看ScaleTransform ...我需要能夠調整圖像的大小,所以我一次沒有一堆2k * 2k的圖像,所以我需要能夠在Image對象中再次使用圖像(即不保存到磁盤) – 2011-04-26 22:41:20

-1

出於好奇,如果你調用重載DecodeJpeg方法,只有1個參數(stream參數,你還可以得到這個錯誤)而不通過mx和我的整數參數以上?

我只是想縮小問題確實是一個流參數問題,而不是mx或我的問題。

+0

是的,仍然崩潰(在仿真器上,順便說一句,但我不能在設備上調試,因爲相機插入並連接到Zune時無法正常工作)。以下是例外的詳細信息:http://pastebin.com/WpCnbK3k – 2011-04-26 21:21:05

+0

至少我們知道這肯定是第一個流參數的問題。它出於某種原因不喜歡你的流。我看到別人有這個問題解決它與這個決議,這是否有幫助http://www.codeproject.com/Questions/152085/WP7-string-to-stream-and-back.aspx?display=Print – Matt 2011-04-26 21:43:34

+0

我我以前看過那個,它並不適用於我,因爲我只是將要轉換爲圖像的Stream。在他的情況下,他將流轉換爲byte [],然後返回到Stream,因爲他做錯了,似乎將其搞亂了...... – 2011-04-26 22:14:14