社区
图形处理/算法
帖子详情
请教。拿到了打印机的DC.如何把它打印的内容存储成图片?
greenjava
2011-07-08 12:54:21
代码如下:
::StartPage(printDC);
framePrivate->spoolPages(printDC, page, page, graphicsContext);
::EndPage(printDC);
其中printDC的类型是HDC
打印DC与普通显示DC有什么区别吗?有什么要注意的吗?
...全文
199
4
打赏
收藏
请教。拿到了打印机的DC.如何把它打印的内容存储成图片?
代码如下: ::StartPage(printDC); framePrivate->spoolPages(printDC, page, page, graphicsContext); ::EndPage(printDC); 其中printDC的类型是HDC 打印DC与普通显示DC有什么区别吗?有什么要注意的吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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一样操作即可...
打印
机
维修资料大全
打印
机
维修资料大全 问:HP6L的机器纸进到2/3处就出现卡纸了,请问是不是要更换分页器?答:分页器主要是负责单页进纸的,其损坏主要会出现多张进纸的想象,和卡纸的关系不大,可以检查一下下搓纸轮,转印辊,他们损坏的可能性较大,若损坏请更换。 问:三星4500加完粉之后出现
打印
浅的现象是何原因?答:首先,加粉时一定要把原来粉仓里面的粉都清理干净,...
SUN Solaris 问题小结
SUN服务器可能遇到的问题总结(一) 1) Q:现在遇到这样一个问题,telnet一台SUN机时报下面的错误: No utmpx entry. You must exec "login" from the lowest level "shell". 我做了下面的处理后: cd /var/adm mv utmpx utmpxbak touch utmpx telnet 恢复了正常,可在该机...
大学英语四级单词
a [Ai, 4, 1n, 4n] art.一(个);任何一(个);每一(个) abandon [4'b1nd4n] vt.离弃,丢弃;遗弃,抛弃;放弃 ability [4'biliti] n.能力,本领;才能,才智 able ['Aib4l] a.能够…的,得以…的;有才干的 aboard [4'b3:d] prep. adv.在(船、飞机、车)上,上船等 about [4'b2ut
使用JAVA控制AD域进行基本的操作详解
前段时间,我接到一个任务:使用JAVA控制AD域进行基本的操作。经几天摸索也看来多位博友的代码,现在摸索出了一套详细的Java操控AD域的方法。废话不多说,现进入正题》》》 一、安装域控服务器 什么是域控服务器我就不多说了,请各位自行百度,安装的教程在下面的连接里:http://www.jb51.net/os/windows/win2008/69883.html 二、安装证书控制服务
电脑知识大全
电脑知识大全详细研究WinXP中CPU占用100%原因及解决方法CPU占用100%案例分析 电脑硬件知识大全(看完了你就
成
硬件高手了)电脑故障排除之“八先八后”网络诊所病历大公布机器响铃不断,这时,如果你知道响铃的含意,就不用去
请教
专业人员了。硬件故障判断如何预防使用软件引发电脑硬盘的六大"硬伤扩展名查询大全windows罕见技巧集(收集整理)windows XP技巧终极必杀全集正确安装机器不
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章