100请教bmp打印问题
据说下面的函数可以实现DIB的打印,是我从csdn上找来的:
/*
//打印或者在屏幕左上角上画位图文件
//pDC 打印机或者屏幕dc指针
iLogPixelX
iLogPixelY
屏幕DC的GetDeviceCaps(LOGPIXELSX)值,其中
iLogPixelX=DC.GetDeviceCaps(LOGPIXELSX);
iLogPixelY=DC.GetDeviceCaps(LOGPIXELSY);
const char *strFileName BMP图片文件名称
*/
void DrawBMP(CDC* pDC,int iLogPixelX,int iLogPixelY,const char *strFileName)
{
CDC MemDC; // 内存设备环境指针,在视的整个存在过程都将存在
CBitmap Bitmap,*pOldBmp;
CRect Source, Dest; // 记录源位图尺寸和最终显示尺寸
BITMAP bm;
if(MemDC.GetSafeHdc() == NULL)
{
HBITMAP hbitmap=(HBITMAP)LoadImage(0,strFileName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
Bitmap.Attach(hbitmap);
MemDC.CreateCompatibleDC(pDC);
Bitmap.GetObject(sizeof(bm),&bm);
pOldBmp=MemDC.SelectObject(&Bitmap);
Source.top=0;
Source.left=0;
Source.right= bm.bmWidth;
Source.bottom = bm.bmHeight;
Dest = Source;
}
pDC->DPtoLP(&Dest);
if(pDC->IsPrinting())
{
Dest.left=(int)(Dest.left*((double)pDC->GetDeviceCaps(LOGPIXELSX))/iLogPixelX);
Dest.right=(int)(Dest.right*((double)pDC->GetDeviceCaps(LOGPIXELSX))/iLogPixelX);
Dest.top=(int)(Dest.top*((double)pDC->GetDeviceCaps(LOGPIXELSY))/iLogPixelY);
Dest.bottom=(int)(Dest.bottom*((double)pDC->GetDeviceCaps(LOGPIXELSY))/iLogPixelY);
}
pDC->StretchBlt(Dest.left, Dest.top, Dest.right, Dest.bottom,
&MemDC, Source.left, Source.top, Source.right,Source.bottom, SRCCOPY);
MemDC.SelectObject(pOldBmp);
Bitmap.DeleteObject();
MemDC.DeleteDC();
return;
}
可有一些地方不明白:
1.如何获得打印机的pDC;
2.他是根据图象的文件名来实现打印的,用int iLogPixelX,int iLogPixelY参数是关于屏幕的,有什么用;
3.如何用该函数直接根据bmp文件名实现完整的打印?
小弟急啊,找了半天才找到这样一个实现bmp打印的函数,各位朋友帮帮忙,其他有实现根据bmp文件名直接实现打印的方法也可以,谢谢了,分不够可以再加。
/*
//打印或者在屏幕左上角上画位图文件
//pDC 打印机或者屏幕dc指针
iLogPixelX
iLogPixelY
屏幕DC的GetDeviceCaps(LOGPIXELSX)值,其中
iLogPixelX=DC.GetDeviceCaps(LOGPIXELSX);
iLogPixelY=DC.GetDeviceCaps(LOGPIXELSY);
const char *strFileName BMP图片文件名称
*/
void DrawBMP(CDC* pDC,int iLogPixelX,int iLogPixelY,const char *strFileName)
{
CDC MemDC; // 内存设备环境指针,在视的整个存在过程都将存在
CBitmap Bitmap,*pOldBmp;
CRect Source, Dest; // 记录源位图尺寸和最终显示尺寸
BITMAP bm;
if(MemDC.GetSafeHdc() == NULL)
{
HBITMAP hbitmap=(HBITMAP)LoadImage(0,strFileName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
Bitmap.Attach(hbitmap);
MemDC.CreateCompatibleDC(pDC);
Bitmap.GetObject(sizeof(bm),&bm);
pOldBmp=MemDC.SelectObject(&Bitmap);
Source.top=0;
Source.left=0;
Source.right= bm.bmWidth;
Source.bottom = bm.bmHeight;
Dest = Source;
}
pDC->DPtoLP(&Dest);
if(pDC->IsPrinting())
{
Dest.left=(int)(Dest.left*((double)pDC->GetDeviceCaps(LOGPIXELSX))/iLogPixelX);
Dest.right=(int)(Dest.right*((double)pDC->GetDeviceCaps(LOGPIXELSX))/iLogPixelX);
Dest.top=(int)(Dest.top*((double)pDC->GetDeviceCaps(LOGPIXELSY))/iLogPixelY);
Dest.bottom=(int)(Dest.bottom*((double)pDC->GetDeviceCaps(LOGPIXELSY))/iLogPixelY);
}
pDC->StretchBlt(Dest.left, Dest.top, Dest.right, Dest.bottom,
&MemDC, Source.left, Source.top, Source.right,Source.bottom, SRCCOPY);
MemDC.SelectObject(pOldBmp);
Bitmap.DeleteObject();
MemDC.DeleteDC();
return;
}
可有一些地方不明白:
1.如何获得打印机的pDC;
2.他是根据图象的文件名来实现打印的,用int iLogPixelX,int iLogPixelY参数是关于屏幕的,有什么用;
3.如何用该函数直接根据bmp文件名实现完整的打印?
小弟急啊,找了半天才找到这样一个实现bmp打印的函数,各位朋友帮帮忙,其他有实现根据bmp文件名直接实现打印的方法也可以,谢谢了,分不够可以再加。
...全文
相关推荐
K100原版清零软件 绝对免费 不产生任何费用
绝对免费 是自己在淘宝上买的绝地实用,里面有说明,
BMP、PNG、JPG 3大格式选型指南:Web/打印/存储场景实测对比
本文深度解析BMP、PNG、JPG三大图像格式的技术原理与适用场景,提供从网页设计到专业打印的实测对比数据。通过实际案例展示BMP的无损特性、PNG的透明优势以及JPG的高效压缩,帮助读者在不同应用场景中做出最优格式选择,提升工作效率与输出质量。
爱普生Epson L100 清零软件下载安装.rar
爱普生Epson L100 清零软件下载安装 使用中有任何问题可以关注并私信,如果资源对您有帮助记得关注收藏好评哟!
epson tx100费墨清零软件
用于epson tx100清零 废墨计数器复位指南新爱普生调整方案(例如爱普生T10)上运行Resetter.exe按程序按“接受”,然后“特别调整模式”
激光S100SP打印机驱动
激光S100SP打印机驱动程序, 在电脑上 直接解压后即可使用,不需要安装,温馨提示!有问题可以私下联系



