2015-11-25 50 views
-2

的quility我有壓縮的位圖到JPEG做了功能的最佳途徑。DELPHI:什麼是壓縮最大,並保持BITMAP

procedure BmptoJpeg(Bmp : TBitmap; JpgStream: TStream); 
var 
    Jpg: TJPEGImage; 
begin 
    Jpg := TJPEGImage.Create; 
    try 
    Jpg.Assign(Bmp); 
    Jpg.CompressionQuality := 10; 
    Jpg.Compress; 
    Jpg.SaveToStream(JpgStream); 

    finally 
    Jpg.Free; 
    end; 

end; 

但是這並不適合原始位圖的高質量。 是否有另一種方式來保持質量和最大壓縮位圖? 而不壓縮爲JPEG另一種方法也很適合我。 只有壓縮max和保持質量是我的目標

+4

同樣的問題在這裏:http://stackoverflow.com/questions/3102043/problem-converting-bmp-to-jpg-using-tjpegimage-component – are

+2

'jpg.CompressionQuality:= 10;'?嘗試'100' – ventiseis

+7

好了,你想怎麼辦?你想要有損JPEG壓縮嗎?你想要無損PNG壓縮嗎?任何決定都將依賴於只有你擁有的圖像內容的知識。不同的算法更適合不同的圖像類型。 –

回答

0

我會說使用PNG圖片代替(可以是有損或無損),但事實證明我在與Alpha有關的新版本Delphi中,他們遇到了一些問題。儘管如此,位圖仍然不支持Alpha。

但是,假設您想將TBitmap保留在其核心位置,並假設您使用的是不是過時的Delphi版本,則可以使用TCompressionStream壓縮位圖。 TCompressionStream可以在任何種類的數據實際的使用,並且在與TFileStream的或內存流或任何其他種類的T流衍生物的大部分一起選擇使用。

爲此,您將創建一個TCompressionStream對象,並使用TBitmap.SaveToSTream()保存位圖到TCompressionStream。結果將是您的位圖數據的無損版本。