1.记得有一个头文件为:jpeg.pas/jpg.pas(查找一下),其中有控制jpg的一些函数;
2.Bitblt有另一个类似的函数,有放大和缩小的功能,在API的帮助中找一下(s开头的)。

解决方案 »

  1.   

    procedure TForm1.SaveScrToStream(AStream: TMemoryStream;zl:integer;dx:integer);
    var
      scrWidth, scrHeight: integer;
      DC: hDC;
      scale:real;
      FBitmap,bbmp: TBitmap;
      FJPEGImage: TJPEGImage;
    begin
      if dx<10 then dx:=1024;
      if (zl<2) or (zl>99) then zl:=99;
      DC := GetDC(0);
      FBitmap := TBitmap.Create;
      bbmp:= TBitmap.Create;
      FJPEGImage := TJPEGImage.Create;
      try
        scrWidth := Screen.Width;
        scrHeight := Screen.Height;
        FBitmap.Width := scrWidth;
        FBitmap.Height := scrHeight;
        BitBlt(FBitmap.Canvas.Handle, 0, 0, scrWidth, scrHeight, DC, 0, 0, SRCCOPY);    //调整尺寸
         scale:=screen.Width/dx;
         bbmp.Width:=round(screen.Width/scale);
         bbmp.Height:=round(screen.Height/scale);
         SetStretchBltMode(bbmp.Canvas.Handle,COLORONCOLOR);
         stretchblt(bbmp.Canvas.Handle,0,0,bbmp.Width,bbmp.Height,FBitmap.Canvas.Handle,0,0,FBitmap.Width,FBitmap.Height,srccopy);
        FJPEGImage.Assign(bbmp);
        //    //FJPEGImage.Assign(FBitmap);
        FJPEGImage.CompressionQuality := zl;//调整图象质量
        FJPEGImage.Compress;    AStream.Clear;
        FJPEGImage.SaveToStream(AStream);
        AStream.Position := 0;
        LeftSize:=AStream.Size;
      finally
        FBitmap.Free;
        bbmp.Free;
        FJPEGImage.Free;
        ReleaseDC(0, DC);
      end;
    end;
      

  2.   

    打印使用TMetaFile,具体见online help
      

  3.   

    谢谢各位,尤其是xiaotian2000(小天)。