delphi - 使用 TJpegImage 组件将 bmp 转换为 jpg 时出现问题

标签 delphi

我有一个 bmp 文件,正在尝试将其转换为 jpeg 格式。使用以下代码创建的 jpeg 失去了很多清晰度。我尝试过调整很多设置,但没有效果。

有没有人有一个可以将 bmp 文件转换为 jpeg 的函数?

var
  Bmp: TBitmap;
  Jpg: TJPEGImage;
begin
  Bmp := TBitmap.Create;
  Jpg := TJPEGImage.Create;
  try
    Bmp.LoadFromFile(BmpFileName);
    Jpg.Assign(Bmp);
    jpg.PixelFormat    :=jf24bit;  // or jf8bit
    Jpg.CompressionQuality := 100;
    Jpg.ProgressiveDisplay := False;
    Jpg.ProgressiveEncoding := False;

    Jpg.SaveToFile(JpgFileName);
  finally
    Jpg.Free;
    Bmp.Free;
  end;
end;

更新 II 很多人回应说 jpeg 不是在这种情况下使用的图形类型。明白了。不是为了打败一个死马,但我已经能够使用其他程序(即 Photoshop)并将其转换为漂亮的 jpeg。我用来创建图表的工具(fusioncharts)也能够将其导出为漂亮的 jpeg(见下文)。有什么区别?

最佳答案

如果你想损失尽可能少的质量,那么你应该尽可能少地压缩,即设置CompressionQuality := 100

更新

JPG 图像格式设计用于照片和类似的光栅图片。 JPG 采用破坏性压缩来减小文件大小。然而,对于较大的质量值 (> ~80),这种压缩的视觉效果可以忽略不计,因为照片不包含大面积的相同颜色、非常规则的形状等。

JPG 格式绝不用于摄影图片以外的任何内容。例如,图表、屏幕截图等确实包含大面积完全相同的颜色、非常规则的形状等,在 JPG 压缩时将显示清晰的伪像。对于这种类型的光栅图像,请使用 PNG。 PNG也是一种压缩格式(也是一种非常非常好的格式!),但压缩是非破坏性的。

所以请不要使用 JPG 作为您的图表!使用PNG!

关于delphi - 使用 TJpegImage 组件将 bmp 转换为 jpg 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3102043/

相关文章:

delphi - 如何缓存函数 bool 结果

delphi - Delphi in set运算符的C++代码

delphi - 如何禁用超过特定时间的 TDateTimePicker 日期?

javascript - Delphi:如何从 WebBrowser 访问(读取和写入)javascript 变量

delphi - 无法解析 Delphi 中的单元名称

delphi - 将集合转换为“命名组件”-编译器错误

Delphi IDE 由于隐藏的模式窗口而锁定

delphi - 如何在 Delphi 中对第三方电子邮件组件进行单元测试?

delphi - 编译器如何处理 case 语句?

delphi - 如何使 Windows 按钮表现为网站按钮