使用TJpegImage组件将bmp转换为jpg的问题

M S*_*kel 5 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;
Run Code Online (Sandbox Code Playgroud)

更新II 很多人都回应说jpeg不是这种情况下使用的图形类型.了解.不是为了击败死马,但我已经能够使用其他程序(即Photoshop)并将其转换为漂亮的jpeg.我用来创建图表(fusioncharts)的工具也可以将它导出到漂亮的jpeg(见下文).有什么不同?

Rod*_*ddy 1

正如其他人所说,JPEG 对于此类图像来说根本就是错误的格式 - 并且由于具有高频色度边缘,您可能会得到 JPEG 最糟糕情况的图像之一!

我建议您获取Paint.Net的副本,并尝试以不同格式(PNG、JPEG、GIF、BMP 等)保存/预览图像,并亲自了解图像大小、质量和性能之间的权衡。

我已经尝试使用 Paint.net 将测试图像保存为 JPEG,并获得与 Delphi 为您提供的完全相同的质量,因此您(或 Delphi)正在做的事情现在没有问题......

更新: 根据维基百科...

JPEG 标准中定义了可选的无损模式;然而,该模式并未在产品中得到广泛支持。

我猜测 FusionCharts 和 Photoshop 有一种指定此模式的方法。通常不使用它,因为 JPEG 通常被认为是有损压缩的同义词。

总之,虽然 JPEG 文件可以支持无损压缩,但 JPEG 并不是理想的格式,因为它没有得到广泛支持。如果你想要无损,PNG 仍然是更好的选择。图像的 PNG 压缩版本比无损压缩的 JPEG 版本小 30%(71K 与 101K)