为什么保存为JPEG的TWebBrowser的渲染内容会丢失质量?

时间:2013-02-02 10:28:54

标签: delphi twebbrowser

我使用以下过程从TWebbrowser创建JPG文件 这导致JPG看起来不错 然后我将这个JPG加载到DevExpress的TcxImage控件中以便打印它。这会弄乱我的图像,因此无法看到地图(它是谷歌地图的一部分地图) 加载图像的代码是

imgPrint.Picture.LoadFromFile(lImage);

我不明白为什么这在屏幕上看起来如此糟糕。 我是这样做的,以便能够打印地图。 它也可以直接从TWebBrowser完成,但我无法控制输出大小,添加我自己的页眉和页脚是棘手的。

procedure TfrmJsZipExplorer.actSaveExecute(Sender: TObject);
var
  ViewObject : IViewObject;
  r : TRect;
  Bitmap: TBitmap;
begin
  if WebBrowser1.Document <> nil then
    begin
      WebBrowser1.Document.QueryInterface(IViewObject, ViewObject) ;
      if Assigned(ViewObject) then
        try
          Bitmap := TBitmap.Create;
          try
            r := Rect(0, 0, WebBrowser1.Width, WebBrowser1.Height) ;
            Bitmap.Height := WebBrowser1.Height;
            Bitmap.Width := WebBrowser1.Width;
            ViewObject.Draw(DVASPECT_CONTENT, 1, nil, nil, Application.Handle, bitmap.Canvas.Handle, @r, nil, nil, 0);
            with TJPEGImage.Create do
              try
                Assign(Bitmap);
                SaveToFile(lImagefile);
              finally
                Free;
            end;
          finally
            Bitmap.Free;
          end;
        finally
          ViewObject._Release;
        end;
    end;
end;

1 个答案:

答案 0 :(得分:4)

如何提高已保存的JPEG图像质量?

您可以将保存图像的CompressionQuality属性设置为压缩率最低,但图像质量值最高。这将改善输出图像的视觉质量。将此属性设置为100将导致更好的图像质量,但文件大小更大:

with TJPEGImage.Create do
try
  Assign(Bitmap);      
  CompressionQuality := 100;
  SaveToFile(lImagefile);
finally
  Free;
end;

此图片档案需要使用JPEG格式吗?

如果您不仅限于图像存档的JPEG格式,请考虑使用其他格式,例如PNG。如果您决定使用带有TPNGImage类的PNG格式,则可以使用CompressionLevel属性,该属性允许您指定已保存图像的压缩级别,这直接影响输出文件的大小,但与JPEG格式压缩不同,保持相同的视觉质量。将此属性设置为9将导致使用完全压缩,这将产生更小的文件大小,质量保持不变,就像没有使用压缩(0值)一样:

uses
  PNGImage;

with TPNGImage.Create do
try
  Assign(Bitmap);
  CompressionLevel := 9;
  SaveToFile(lImagefile);
finally
  Free;
end;