高分送:怎样将超过打印机宽度的位图,缩小其尺寸,并且打印出来!

keboy 2000-11-01 03:32:00
100分,
要求:
尽量详尽!!!
...全文
432 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lu_hm 2001-10-07
  • 打赏
  • 举报
回复
gz
vpm 2001-10-07
  • 打赏
  • 举报
回复
go on
keboy 2000-11-03
  • 打赏
  • 举报
回复
可能在Dll中调用存在一些问题。
算了,我只能换一种方式了
感谢easypaper!95分
另感谢IUPRG的参与!5分
keboy 2000-11-02
  • 打赏
  • 举报
回复
请easypaper
大虾再将详细一点。
我的思路是这样的
TPrinter *Printer = Printer();
Image1->Width = Printer->PageWidth;
Image1->Height = Printer->PageHeight;
TRect rect;
rect.Left = 0;
rect.Top = 0;
rect.Right = Image1->Picture->Bitmap->Width/5;(比例我可以任意定也可/10)
rect.Bottom = Image1->Picture->Bitmap->Height/5;
Image1->Canvas->StretchDraw(rect,Iamge1->Picture->Bitmap);
这就做成了打印预览;
打印时
将rect放大或缩小;
就改做
Printer->Canvas->StretchDraw(rect,Image1->Picture->Bitmap);
老魏2006 2000-11-02
  • 打赏
  • 举报
回复
有没有设置打印模式?
显示分辨率和打印分辨率使不同的。同样显示一页纸,屏幕上可能也就几百个象素,但是打印机就不同了,你应该根据纸张大小(不是指实际的纸张大小,而是指逻辑值。同打印机分辨率相关),动态计算缩放比例。例如,屏幕上500*500,可能正合适,而打印机中,打出来的图形肯定很小。
keboy 2000-11-02
  • 打赏
  • 举报
回复
我不是打印报表
说简单一点
可能我要做到的功能
就是打印位图,
要求就是要象ACDSee中的打印一样,可以适合比例。
  • 打赏
  • 举报
回复
将此位图转入到quickreport上的image;
事先将此report的image设为srecth=true;
将quickreport预览打印不就行了?
keboy 2000-11-02
  • 打赏
  • 举报
回复
很高兴有大家回。
是这样的,我最近作了一个NOTES的增强控件。实现在NOTES窗体上手写批注。(其实任何窗体都可以)
是外挂一个DLL。通过获得NOTES窗体HANDLE,在其DC上画画。
大家一定很清楚,NOTES的文档是无法与我在上面画的东西一起打印的。
没办法我只能打印当前窗体。
利用BitBlt传输得到了当前窗体客户区的位图句柄。
然后我需要作的是将这个宽度>A4的位图,缩小打印出来;
好象并不是很难,StretchDraw就可以了,但是打印出来只是一个缩略图。
我试了一下ACDSee下的位图打印(将我截获的位图)
他就可以做到将位图缩小成与打印纸相同的比例,然后打印出来。
我试了很久。始终没有成功。
另外,如果有人对我写的这个PLUGIN感兴趣,可与我联系。
keboy@263.net

老魏2006 2000-11-02
  • 打赏
  • 举报
回复
我这里可以(我已经试过了)
打印代码如下:
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
TPrinter *Pri = Printer();
Image1->Width = Pri->PageWidth;
Image1->Height = Pri->PageHeight;
TRect rect;
rect.Left = 0;
rect.Top = 0;
rect.Right = Image1->Width/5;
rect.Bottom = Image1->Height/5;
Pri->BeginDoc();
Pri->Canvas->StretchDraw(rect,Image1->Picture->Bitmap);
Pri->EndDoc();
}

通过上面的代码,成功的将一个图片打印到一张纸的1/25大小(5X5)
keboy 2000-11-02
  • 打赏
  • 举报
回复
easypaper:
好象不行!
我就算将rect.Right = 400;
rect.Bottom = 300
把它定死。都是不行的!
我想,
关键是我可以怎样缩小位图;
并且达到ACDSee的效果;
大家可以看看ACDSee里的打印预览;
他就可以将一幅大于A4纸的位图,缩小然后打印出来;
老魏2006 2000-11-02
  • 打赏
  • 举报
回复
注意:
在不同情况下,Image1->Picture->Bitmap->Width的大小,是不会改变的。因此,你的rect并没有在显示或者打印时改变大小。
虽然你的Image1随着纸张改变了大小,但是其中的bitmap并没有改变。
因此,修改成
rect.Right = Image1->Width/5;(比例我可以任意定也可/10)
rect.Bottom = Image1->Height/5;
试一试。
hfyun 2000-11-01
  • 打赏
  • 举报
回复
能否说清楚点问题背景?
老魏2006 2000-11-01
  • 打赏
  • 举报
回复
将图形缩放不就可以了?
StreatchBlt
  • 打赏
  • 举报
回复
将image控件的strech属性设为true不就行了?;
难道是什么,请详细告知。
如果你的位图是在数据库中则
利用quickreport3.01以上的dbimage也行的。
pjy 2000-11-01
  • 打赏
  • 举报
回复
关注

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧