首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

打印A4,B5改变后,使打出的波形大小不变的有关问题

2012-02-04 
打印A4,B5改变后,使打出的波形大小不变的问题我把波形放在PaintBox上,怎么样使打印的波形在A4和B5改变的情

打印A4,B5改变后,使打出的波形大小不变的问题
我把波形放在PaintBox上,怎么样使打印的波形在A4和B5改变的情况下,打出的波形大小不变?下面的程序在A4,B5改变后,波形大小改变了。
void   PrintImage(TPaintBox   *   SRE)
{
      Printer()-> Canvas-> StretchDraw   (
            Rect(SRE-> Left*Printer()-> PageWidth   /Panel1-> Width,
                      SRE-> Top*Printer()-> PageHeight   /Panel1-> Height   ,
                      (SRE-> Left+SRE-> Width)*Printer()-> PageWidth   /Panel1-> Width   ,
                      (SRE-> Top+SRE-> Height)*Printer()-> PageHeight   /Panel1-> Height),
            SRE-> Picture-> Graphic   );
}
PaintBox放在Panel1上。
请问怎么样改能达到上述要求?

[解决办法]
void Print_Bitmap(TCanvas *lpCanvas, TRect rectDest, Graphics::TBitmap *lpBitmap)
{
DIBSECTION DibSec;
GetObject(lpBitmap-> Handle, sizeof(DibSec), &DibSec);

StretchDIBits(lpCanvas-> Handle,
rectDest.Left, rectDest.Top,
(rectDest.Right-rectDest.Left), (rectDest.Bottom-rectDest.Top),
0, 0,
lpBitmap-> Width, lpBitmap-> Height,
DibSec.dsBm.bmBits,
(BITMAPINFO*)&DibSec.dsBmih,
DIB_RGB_COLORS,
SRCCOPY);
}
[解决办法]
如果要保证打印到纸面的绝对尺寸不变,需要获得打印机的
输出分辨率才行,一般可以样计算:
(1)Printer()-> PageHeight
-> PageWidth
获得页面大小的长宽点数,Canvas按此单位
(2)DPIx=GetDeviceCaps(Printer()-> Handle,LOGPIXELSX)
DPIy=GetDeviceCaps(Printer()-> Handle,LOGPIXELSY)
获得当前打印机打印分辨率,注意:X,Y方向上可能不同,单位: 点/英寸
(3)根据分辨率和你需要的打印大小,缩放你的输出图形

例如: 打印机分辨率为600 dpi (X,Y向相同)
页面10*8 inch
则对程序而言打印机页面的Canvas大小会是: 6000*4800

具体的计算还不算太复杂
不妨试试

热点排行