你是用激光打印机或者喷墨打印机打的吧。如果是针打就好了。
原因在于Canvas缺省的Mapping Mode是MM_TEXT,即以象素点为单位。将其改为英寸或者毫米就可以了。

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    bmp:tbitmap;
    rect:trect;
    X,Y:integer;
    begin
    bmp:=tbitmap.create;
    bmp.LoadFromFile('writing.bmp');
    //x,y为打印机每英寸的像素数
    X := GetDeviceCaps(printer.Handle, logPixelsX);
    Y := GetDeviceCaps(Handle, logPixelsY);
    rect.left:=0;
    rect.Top:=0;
    //1英寸=2。54厘米
    rect.Right:=trunc((bmp.Width*X)/2.54);
    rect.bottom:=trunc(bmp.Height*y/2.54);
    try
    printer.begindoc;
    printer.canvas.StretchDraw(rect,bmp);
    printer.enddoc;
    except
    printer.abort;
    raise;
    end;
    bmp.free;
    end;
      

  2.   

    to chechy(chechy):
       能否讲一下详细的做法?我听得不是很明白。我用的是HP6L激光打印机。to free007(无是无非):
       你的方法我试过了(包括小豆芽的),虽然能够打印出来,但是很难看,主要
    是好象图形不是按1:1打印出来的,而好象是将一个小图片强行拉伸到大图片大小
    打印的,像数点很粗。而实际上我要打印的图片本身就很大的,为何会这样?
       我的EMAIL: [email protected]
      

  3.   

    to chechy(chechy):
       能否讲一下详细的做法?我听得不是很明白。我用的是HP6L激光打印机。to free007(无是无非):
       你的方法我试过了(包括小豆芽的),虽然能够打印出来,但是很难看,主要
    是好象图形不是按1:1打印出来的,而好象是将一个小图片强行拉伸到大图片大小
    打印的,像数点很粗。而实际上我要打印的图片本身就很大的,为何会这样?
       我的EMAIL: [email protected]
      

  4.   

    to chechy(chechy):
       能否讲一下详细的做法?我听得不是很明白。我用的是HP6L激光打印机。to free007(无是无非):
       你的方法我试过了(包括小豆芽的),虽然能够打印出来,但是很难看,主要
    是好象图形不是按1:1打印出来的,而好象是将一个小图片强行拉伸到大图片大小
    打印的,像数点很粗。而实际上我要打印的图片本身就很大的,为何会这样?
       我的EMAIL: [email protected]
      

  5.   

    把tbitmap的大小设置为你的图象的实际大小。