【问题标题】:DELPHI : What is the best way to compress max and to keep quility of BITMAPDELPHI:压缩最大值和保持 BITMAP 质量的最佳方法是什么
【发布时间】:2016-02-28 04:26:36
【问题描述】:

我有一个函数用于将位图压缩为 JPEG。

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的方法对我也有好处.. 只有压缩最大和保持质量是我的目标

【问题讨论】:

  • Jpg.CompressionQuality := 10; ?试试100
  • 好吧,你想做什么?你想要有损JPEG压缩吗?你想要无损PNG压缩吗?任何决定都将依赖于只有您拥有的图像内容的知识。不同的算法适用于不同的图像类型。
  • 您说过“将其压缩 90%”,意思是“丢弃大部分数据”。当您这样做时,除了质量差之外,您期望什么?

标签: delphi bitmap compression image-compression


【解决方案1】:

我会说改用 PNG(可能是有损或无损的),但事实证明,在与 Alpha 相关的较新版本的 Delphi 中,我遇到了真正的问题。无论如何,位图都不支持 Alpha,所以……去看看吧。

但假设您希望将其作为 TBitmap 的核心,并假设您使用的 Delphi 版本不是很过时, 您可以使用 TCompressionStream 压缩位图。 TCompressionStream 实际上可以用于任何类型的数据,并且在大多数情况下可以与 TFileStream 或 TMemoryStream 或任何其他类型的 TStream 衍生物结合使用。

为此,您将创建一个 TCompressionStream 对象并使用 TBitmap.SaveToSTream() 将位图保存到 TCompressionStream。结果将是您的位图数据的无损版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多