📄 csdn_文档中心_打印位图(上).htm
字号:
<TD align=middle bgColor=#003399><FONT color=#ffffff>关键字</FONT></TD>
<TD width=500> 打印 位图</TD></TR>
<TR>
<TD align=middle height=5></TD>
<TD align=middle width=500></TD></TR></TBODY></TABLE><!--文章说明信息结束//-->
<TABLE border=0 width=600>
<TBODY>
<TR>
<TD align=left><BR>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于位图的打印,很多人对此很困惑,在这方面产生的问题也很多,主要包括以下几点。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN>1</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:打印的图片太小;</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN>2</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:根本打印不出来位图</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN>3</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">:打印预览可见、但打印不出来;</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">产生这些问题的根本原因,在于对位图的理解不够深刻。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一个</SPAN><SPAN
lang=EN-US>CBitmap</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象,可能是</SPAN><SPAN
lang=EN-US>DDB</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位图(设备相关位图),或者</SPAN><SPAN
lang=EN-US>DIB</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位图(设备无关位图),其中,一个设备兼容的内存</SPAN><SPAN
lang=EN-US>DC</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中,只能选择该设备兼容的</SPAN><SPAN
lang=EN-US>DDB</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位图或者单色的位图。注意,位图只能被选择进入到设备兼容的内存</SPAN><SPAN
lang=EN-US>DC</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中,并不能选择进入到真实的</SPAN><SPAN
lang=EN-US>dc</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中,这就是有时候根本打印不出来图片的原因。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">至于打印图片太小的问题,主要是因为衡量位图大小的单位是横向和纵向的像素数,而不是确切的长度,所以如果把一个图片映射到屏幕上,会出现一个比较大的图像,但是打印机的分辨率比屏幕高很多(屏幕一般是</SPAN><SPAN
lang=EN-US>96dpi</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">,而打印机最少一般也有</SPAN><SPAN
lang=EN-US>300dpi</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">),如果把位图不缩放地映射到打印机上,则必然要小很多。解决该类问题的方法是使用</SPAN><SPAN
lang=EN-US>StretchBlt</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">拉伸显示图像。</SPAN></FONT></P>
<P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><FONT size=3><SPAN
lang=EN-US><SPAN
style="mso-tab-count: 1">
</SPAN></SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">另外</SPAN><SPAN
lang=EN-US>LoadImage</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数中使用</SPAN><SPAN
lang=EN-US>LR_CREATEDIBSECTION</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选项产生的</SPAN><SPAN
lang=EN-US>DIB</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">位图可以被选择进入任何设备兼容的内存</SPAN><SPAN
lang=EN-US>DC</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中。因此可以使用</SPAN><SPAN
lang=EN-US>LoadImage</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数加载一个位图文件或者资源,直接把位图通过</SPAN><SPAN
lang=EN-US>StretchBlt</SPAN><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">打印出来。下面是把一个位图文件进行打印的相关代码:</SPAN></FONT></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">/*<?xml:namespace
prefix = o ns = "urn:schemas-microsoft-com:office:office"
/><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">//</SPAN><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">打印或者在屏幕左上角上画位图文件</SPAN><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">//pDC
</SPAN><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">打印机或者屏幕</SPAN><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">dc</SPAN><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">指针</SPAN><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">iLogPixelX<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">iLogPixelY<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">屏幕</SPAN><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">DC</SPAN><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">的</SPAN><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">GetDeviceCaps(LOGPIXELSX)</SPAN><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">值,其中</SPAN><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">iLogPixelX=DC.GetDeviceCaps(LOGPIXELSX);<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">iLogPixelY=DC.GetDeviceCaps(LOGPIXELSY);<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">const
char *strFileName BMP</SPAN><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">图片文件名称</SPAN><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">*/</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">void</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">
DrawBMP(CDC* pDC,</SPAN><SPAN lang=EN-US
style="COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">int</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">
iLogPixelX,</SPAN><SPAN lang=EN-US
style="COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">int</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">
iLogPixelY,</SPAN><SPAN lang=EN-US
style="COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">const</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">
</SPAN><SPAN lang=EN-US
style="COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">char</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">
*strFileName)<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">{<o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"><SPAN
style="mso-tab-count: 1">
</SPAN>CDC<SPAN style="mso-tab-count: 1"> </SPAN><SPAN
style="mso-tab-count: 1">
</SPAN>MemDC; </SPAN><SPAN lang=EN-US
style="COLOR: #009900; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">//
</SPAN><SPAN
style="COLOR: #009900; FONT-FAMILY: 宋体; FONT-SIZE: 10pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt">内存设备环境指针,在视的整个存在过程都将存在</SPAN><SPAN
lang=EN-US
style="COLOR: black; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-bidi-font-size: 12.0pt"><o:p></o:p></SPAN></P>
<P align=left class=MsoNormal
style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none"><SPAN
lang=EN-US
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -