Form上放一个简单的TImage然后载入一个位图打印代码如下  Printer.BeginDoc;
  ScaleX := GetDeviceCaps(Printer.Handle, logPixelsX) div Screen.PixelsPerInch;
  ScaleY := GetDeviceCaps(Printer.Handle, logPixelsY) div Screen.PixelsPerInch;
  R := Rect(0, 0, Image1.Picture.Bitmap.Width * ScaleX, Image1.Picture.Bitmap.Height * ScaleY);
  Printer.Canvas.StretchDraw(R,Image1.Picture.Bitmap); //打印出后, 这里图片不显示
  Printer.Canvas.MoveTo(10 * ScaleX, 10 * ScaleY);
  Printer.Canvas.LineTo(300 * ScaleX, 300 * ScaleY); //在这里画条线却可显示  Printer.EndDoc;非常奇怪,请大家帮忙看是为什么图片显示不出来

解决方案 »

  1.   

    你可以把Img充满整个屏幕,直接调用窗口的Print方法看看效果
    如果好的话
    参考下Form的Print方法吧
      

  2.   

    加分了呀?呵呵! 打印图片非常简单,下面的方法即可实现: uses Printers; procedure TForm1.Button1Click(Sender: TObject); 
    var R: TRect; 
    begin 
      Printer.BeginDoc; 
      try 
        R := Rect(0,0,Image1.Picture.Width,Image1.Picture.Height);//请先在Image1里面载入图片。 
        Printer.Canvas.StretchDraw(R, Image1.Picture.Graphic); 
      finally 
        Printer.EndDoc; 
      end; 
    end;
      

  3.   

    不行,无法显示,请看我列出的代码.
    假如我把Image1的Transparent属性变成True,那末可以打印出来,但是图片背景变成黑色,此外我使用CopyRect还是无法显示,没有高水平来回答这个问题吗?
      

  4.   

    很简单的问题吧, 为什么没有人知道呢?
    下面代码为什么无法把图片打印出来, 线道是可以画出来
    procedure TForm1.Button1Click(Sender: TObject);
    var
    ScaleX, ScaleY: Integer;
    R: TRect;
    begin
      Printer.BeginDoc;
      ScaleX := GetDeviceCaps(Printer.Handle, logPixelsX) div Screen.PixelsPerInch;
      ScaleY := GetDeviceCaps(Printer.Handle, logPixelsY) div Screen.PixelsPerInch;
      R := Rect(0, 0, Image1.Picture.Bitmap.Width * ScaleX, Image1.Picture.Bitmap.Height * ScaleY);
      Printer.Canvas.CopyRect(R,Image1.Picture.Bitmap.Canvas, R);
      Printer.Canvas.MoveTo(10 * ScaleX, 10 * ScaleY);
      Printer.Canvas.LineTo(300 * ScaleX, 300 * ScaleY);
      Printer.EndDoc;
    end;