打印机分辩率是按一英寸DPI来计算首先得到打印机的分辩率-->英寸-->厘米 

解决方案 »

  1.   

    打印机分辩率是按一英寸DPI来计算首先得到打印机的分辩率-->英寸-->厘米 
      

  2.   

    打印机分辩率是按一英寸DPI来计算首先得到打印机的分辩率-->英寸-->厘米 
      

  3.   

    谢谢,我找到方法了,
    (1)用quickreport作报表时
    QuickRep1.QRPrinter.PaperLength  返回的值除以100得到厘米数;
    而QuickRep1.ClientHeight返回象素数;
    (2)
    image1.Width:=((getdevicecaps(printer.Handle,LOGPIXELSX)/2.54)*我要求的厘米数;
    image1.Height:=((getdevicecaps(printer.Handle,LOGPIXELSY)/2.54))*我要求的厘米数;
    然后,用下面的代码打印图片,可以得到符合要求的打印大小
    with printer do
            begin
                begindoc;
                canvas.StretchDraw(strect,image1.Picture.Graphic);
                enddoc;
            end;
    //其中strect是一个Trect对象,而且strect.right-strect.left=image1.width,strect.bottom-strect.top=image1.height
    (3)奇怪的是,第二种方法不适合的一种情况
      

  4.   

    function TForm1.CMToPixel(CM: Integer): Integer;
    var
      p: TPoint;
    begin
      SetMapMode(Canvas.Handle, MM_HIMETRIC);
      p := Point(CM * 1000, 0);
      LPToDP(Canvas.Handle, p, 1);
      Result := p.X;
      SetMapMode(Canvas.Handle, MM_TEXT);
    end;
      

  5.   

    打印图片, 起码有 300dpi (dot per inch)即 300像素每2.54厘米 或
    是119像素/厘米所以 5cm x 3cm 图像, 便要有 119 * 5 x 119 * 3 或 595 x 357像素了.
    同样道理, 一副 600dpi的图像, 便要 1190 x 714像素了.一般显示屏只需 72dpi 或 96dpi便足够了, 但以这样的解析度打印, 效果差极了.