社区
图形处理/算法
帖子详情
请教。拿到了打印机的DC.如何把它打印的内容存储成图片?
greenjava
2011-07-08 12:54:21
代码如下:
::StartPage(printDC);
framePrivate->spoolPages(printDC, page, page, graphicsContext);
::EndPage(printDC);
其中printDC的类型是HDC
打印DC与普通显示DC有什么区别吗?有什么要注意的吗?
...全文
246
4
打赏
收藏
请教。拿到了打印机的DC.如何把它打印的内容存储成图片?
代码如下: ::StartPage(printDC); framePrivate->spoolPages(printDC, page, page, graphicsContext); ::EndPage(printDC); 其中printDC的类型是HDC 打印DC与普通显示DC有什么区别吗?有什么要注意的吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dylwx
2012-03-13
打赏
举报
回复
写文件发生错误,可用CFile的方法。
dfasri
2011-07-11
打赏
举报
回复
你的代码, 尝试过用随便一个窗体的DC能够保存成功吗?
greenjava
2011-07-11
打赏
举报
回复
[Quote=引用 1 楼 dfasri 的回复:]
按平时的DC一样操作即可...
[/Quote]
我怎么存成文件也是失败呢?
附上我的存储函数
BOOL Hdc2BmpFile(HDC hdc,LPSTR szFilePath,DWORD dwHeight,DWORD dwWidth,int x,int y)
{
if( hdc == NULL || szFilePath == NULL)
return FALSE;
// Get dimensions
DWORD dwBPP, dwNumColors;
dwBPP = GetDeviceCaps(hdc, BITSPIXEL);
if(dwBPP=8) {
dwNumColors = 256;
} else {
dwNumColors = 0;
}
// Create compatible DC
HDC hdc2;
hdc2 = CreateCompatibleDC(hdc);
if(hdc2==NULL)
return FALSE;
// Create bitmap
HBITMAP bitmap;
BITMAPINFO bmpinfo;
LPVOID pBits;
bmpinfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmpinfo.bmiHeader.biWidth = dwWidth;
bmpinfo.bmiHeader.biHeight = dwHeight;
bmpinfo.bmiHeader.biPlanes = 1;
bmpinfo.bmiHeader.biBitCount = (WORD) dwBPP;
bmpinfo.bmiHeader.biCompression = BI_RGB;
bmpinfo.bmiHeader.biSizeImage = 0;
bmpinfo.bmiHeader.biXPelsPerMeter = 0;
bmpinfo.bmiHeader.biYPelsPerMeter = 0;
bmpinfo.bmiHeader.biClrUsed = dwNumColors;
bmpinfo.bmiHeader.biClrImportant = dwNumColors;
bitmap = CreateDIBSection(hdc, &bmpinfo, DIB_PAL_COLORS, &pBits, NULL, 0);
if(bitmap==NULL)
return FALSE;
HGDIOBJ gdiobj;
gdiobj = SelectObject(hdc2, (HGDIOBJ)bitmap);
if((gdiobj==NULL) || (gdiobj==(void *)GDI_ERROR))
{
DeleteDC(hdc2);
return FALSE;
}
if (!BitBlt(hdc2, 0,0, dwWidth, dwHeight, hdc, x,y, SRCCOPY))
return FALSE;
RGBQUAD colors[256];
if(dwNumColors!=0)
{
dwNumColors = GetDIBColorTable(hdc2, 0, dwNumColors, colors);
}
// Fill in bitmap structures
BITMAPFILEHEADER bitmapfileheader;
BITMAPINFOHEADER bitmapinfoheader;
bitmapfileheader.bfType = 0x4D42;
bitmapfileheader.bfSize = ((dwWidth * dwHeight * dwBPP)/8) + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (dwNumColors * sizeof(RGBQUAD));
bitmapfileheader.bfReserved1 = 0;
bitmapfileheader.bfReserved2 = 0;
bitmapfileheader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + (dwNumColors * sizeof(RGBQUAD));
bitmapinfoheader.biSize = sizeof(BITMAPINFOHEADER);
bitmapinfoheader.biWidth = dwWidth;
bitmapinfoheader.biHeight = dwHeight;
bitmapinfoheader.biPlanes = 1;
bitmapinfoheader.biBitCount = (WORD)dwBPP;
bitmapinfoheader.biCompression = BI_RGB;
bitmapinfoheader.biSizeImage = 0;
bitmapinfoheader.biXPelsPerMeter = 0;
bitmapinfoheader.biYPelsPerMeter = 0;
bitmapinfoheader.biClrUsed = dwNumColors;
bitmapinfoheader.biClrImportant = 0;
// Write bitmap to disk
HANDLE hfile;
DWORD dwBytes;
hfile = CreateFileA(szFilePath,GENERIC_WRITE,0,NULL,CREATE_NEW|TRUNCATE_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hfile==INVALID_HANDLE_VALUE)
{
DeleteObject(bitmap);
DeleteDC(hdc2);
return FALSE;
}
WriteFile(hfile,&bitmapfileheader,sizeof(BITMAPFILEHEADER), &dwBytes, NULL);
WriteFile(hfile,&bitmapinfoheader,sizeof(BITMAPINFOHEADER), &dwBytes, NULL);
if(dwNumColors!=0)
WriteFile(hfile,colors,sizeof(RGBQUAD)*dwNumColors,&dwBytes,NULL);
WriteFile(hfile,pBits,(dwWidth*dwHeight*dwBPP)/8,&dwBytes,NULL);
CloseHandle(hfile);
// Clean up
DeleteObject(bitmap);
DeleteDC(hdc2);
return TRUE;
}
dfasri
2011-07-08
打赏
举报
回复
按平时的DC一样操作即可...
VB中实现
图片
打印
的步骤与技巧
本文聚焦于Visual Basic编程环境下的
图片
打印
。介绍了相关对象的应用,如创建和使用对象、设置
打印
机
参数等。阐述了
图片
加载、
存储
管理、
打印
流程,包括
打印
前准备、过程及常见问题解决。还提及
图片
缩放、位置调整,以及结束
打印
和
打印
机
资源管理,助力实现高质量
打印
。
C++
打印
图片
的方法
本文介绍了在Windows环境下通过不同方法实现
打印
功能的技术细节。包括使用ShellExecute执行
打印
命令的方法,以及利用
打印
机
设备上下文(
DC
)进行
打印
的具体步骤。此外,还提供了通过Win.ini文件创建
打印
机
DC
的示例代码。
【随文杂想】超长图PS 切片为
打印
机
A4纸大小
打印
本文详细介绍了如何使用Adobe Photoshop进行超大
图片
的切片操作,以便适应A4纸大小的
打印
需求。通过设置参考线、切片工具和导出切片,然后利用Adobe Acrobat Pro
DC
将切片合并为PDF并添加Bates编号,实现有序的
打印
准备。
java 条形码
打印
机
_java使用佳博
打印
机
打印
条形码
本文介绍了如何使用Java编程接口结合TSCLIB.dll动态链接库,实现在佳博GP-1124D
打印
机
上
打印
条形码。提供了详细的步骤,包括加载库文件、设置
打印
机
参数、调用接口方法等,并展示了相关代码示例。这种方法避免了通过生
成
图片
再
打印
的方式,确保条形码
打印
效果和扫码效率。
STM32热敏
打印
机
V1硬件设计与调试实战
本文详细阐述基于STM32F103C8T6的热敏
打印
机
V1版硬件全流程实践,涵盖热敏
打印
原理、模块化硬件架构(主控、电源、SPI Flash字库、蓝牙/USB通信、
打印
头驱动、步进电机控制)、原理图设计要点(LDO防接反、JTAG引脚规避)、PCB布局布线规范(电源路径优化、单点接地、测试点设计)及典型调试问题(电机驱动电压错误、加热脉宽失稳、纸检失效)与解决方案。
图形处理/算法
19,464
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章