2012-09-11 62 views
2

首先,這個問題不是關於「如何將位圖保存爲磁盤上的jpeg?」將位圖編碼爲Jpeg

我找不到(或想到)用Jpeg壓縮轉換Bitmap的方法,但將它保留爲Bitmap對象。 MSDN clearly shows如何將位圖保存爲JPEG,但我在尋找的是如何將編碼/壓縮應用於Bitmap對象,所以我仍然可以在我的代碼中傳遞它,而無需引用該文件。

一個背後的原因將是一個輔助類來處理位圖,但不應該知道使用的持久性的方法。

+0

相關[在.NET壓縮圖像](http://stackoverflow.com/q/1377438/11343) – CharlesB

回答

4

所有圖像在載入程序存儲器時都是位圖。在寫入磁盤時通常使用特定的壓縮,在從磁盤讀取時使用解壓縮。

如果你擔心的圖像,你可以壓縮,壓縮字節,通過字節數組圍繞內部的內存佔用。壓縮對於圖像的無損壓縮是很好的。不要忘記,許多圖像壓縮具有different levels of losiness(sp?)換句話說,壓縮丟棄數據以儘可能以最小的字節數存儲圖像。

德/壓縮也是在你的交易的內存佔用的處理時間的性能折衷。無論如何,除非你真的很喜歡,否則如果你需要以任何方式操縱它,圖像確實需要是一個位圖。

這裏是an answer for a somewhat similar question,你可能會感興趣。

+0

我擔心的是真的關於圖像處理和持久性之間關注的分離。我可以將jpeg保存在文件系統(直接或隔離存儲),數據庫或雲中。我的圖像處理不知道,而且我的持久層不適合做一些圖像處理,不是嗎? – Tipx

+0

沒錯。圖像處理是一個單獨的問題。雖然如果您使用任何類型的有損壓縮類型,您將通過拋出數據來自動進行處理,即壓縮算法認爲它不需要保留圖像。 –

3

Bitmap不支持的編碼內存存儲。它始終未編碼(請參見PixelFormat枚舉)。可能你需要編寫自己的包裝類/抽象,或放棄這個想法。

1
var stream = new MemoryStream() 
Bitmap.Save(Stream, ImageFormat) 

這是您需要的嗎?

+0

不要忘了jpeg壓縮是有損的。如果壓縮爲jpeg然後解壓縮爲位圖,則會有不同(較少)的圖像信息:http://en.wikipedia.org/wiki/Lossy_compression –