VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2341|回复: 11

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

[复制链接]

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
发表于 2020-1-26 17:00:01 | 显示全部楼层 |阅读模式
我把波形放在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上。
请问怎么样改能达到上述要求?
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-2-21 13:00:01 | 显示全部楼层
使用 B5 的纸计算一个固定的比例应该就可以了吧
不直接使用 Printer()->PageHeight

BTW:
打印机使用 StretchDraw 可能会失败的
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-7-23 22:00:01 | 显示全部楼层
还有高手发表下意见?
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-7-23 22:15:01 | 显示全部楼层
还有高手发表下意见?
回复

使用道具 举报

1

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-8-11 12:30:01 | 显示全部楼层
愁,没人问
打印机使用 StretchDraw 可能会失败的,那要怎么改好呢?
回复

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-11 23:30:01 | 显示全部楼层
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

主题

8

帖子

8.00

积分

新手上路

Rank: 1

积分
8.00
 楼主| 发表于 2020-8-12 13:45:01 | 显示全部楼层
starburg:这个怎么用,能详细说下吗?
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-8-12 19:00:02 | 显示全部楼层
比例问题
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-12 19:15:02 | 显示全部楼层
如果要保证打印到纸面的绝对尺寸不变,需要获得打印机的
输出分辨率才行,一般可以样计算:
(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

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

使用道具 举报

0

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-8-12 19:45:01 | 显示全部楼层
楼主不明白的是什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表