关于打印图片的问题

EagleFew 2005-09-25 11:03:02
我把文字与片图一起生成了一张图片供打印,在我自己的打印机上可以正常的工作,到其它打印机上就不能打印,文字却可以打印!

与打印机有关的打印代码仅为:

xWidth=GetDeviceCaps(CodePrinter->Handle,LOGPIXELSX)/2.54;
yHeight=GetDeviceCaps(CodePrinter->Handle,LOGPIXELSY)/2.54;
CodePrinter->BeginDoc();
CodePrinter->Canvas->StretchDraw(PrintRect,CodeBitmap);//CodeBitmap就是组合好的图片供最后打//印
CodePrinter->EndDoc();

请赐教。

在下有礼了!

...全文
142 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
EagleFew 2005-09-27
  • 打赏
  • 举报
回复
首先谢谢楼上的回复!

再请教,如何判断可支持StretchBlt函数呢?

DRIVERVERSION 设备驱动程序版本
TECHNOLOGY 下列常数之一:
DT_PLOTTER:绘图仪。
DT_RASDISPLAY:光栅显示器。
DT_RASPRINTER:光栅打印机。
DT_RASCAMERA:光栅照相机。
DT_CHARSTREAM:字符流。
DT_METAFILE:图元文件。
DT_DISPFILE:显示文件

以上值是我在中文版的SDK帮助中找到的,我估计应该是它们中的一个值。

请告知在下,应该为那个值?
  • 打赏
  • 举报
回复
if (GetDeviceCaps(CodePrinter->Handle, RASTERCAPS) & RC_STRETCHBLT)
{
xWidth=GetDeviceCaps(CodePrinter->Handle,LOGPIXELSX)/2.54;
yHeight=GetDeviceCaps(CodePrinter->Handle,LOGPIXELSY)/2.54;
CodePrinter->BeginDoc();
CodePrinter->Canvas->StretchDraw(PrintRect,CodeBitmap);//CodeBitmap就是组合好的图片供最后打//印
CodePrinter->EndDoc();
}
  • 打赏
  • 举报
回复
Canvas->StretchDraw()其实是调用了API StretchBlt。
象BitBlt、StretchBlt这种操作不是所有设备都支持,某些打印机驱动不一定支持的。
见Windows SDk帮助:
Not all devices support the StretchBlt function. For more information, see the GetDeviceCaps function.

应该使用StretchDIBits来绘制,这个所有支持DC的设备都支持。
EagleFew 2005-09-26
  • 打赏
  • 举报
回复
晕!

怎么没有人为我解答啊?

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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