社区
图形处理/算法
帖子详情
请教。拿到了打印机的DC.如何把它打印的内容存储成图片?
greenjava
2011-07-08 12:54:21
代码如下:
::StartPage(printDC);
framePrivate->spoolPages(printDC, page, page, graphicsContext);
::EndPage(printDC);
其中printDC的类型是HDC
打印DC与普通显示DC有什么区别吗?有什么要注意的吗?
...全文
200
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处就出现卡纸了,请问是不是要更换分页器?答:分页器主要是负责单页进纸的,其损坏主要会出现多张进纸的想象,和卡纸的关系不大,可以检查一下下搓纸轮,转印辊,他们...
SUN Solaris 问题小结
一台把数据盘share出来,一台mount上了,但是客户端的主机进入共享盘中的某些 目录,系统提示ermission denied,只有把服务端的文件改为777才可以进,但是公司不许这么作,两台主机也已经重启过了,问题依旧,
请教
各位GGJJ,...
大学英语四级单词
把...并入 abstract ['1bstr1kt] a.抽象(派)的n.摘要vt.摘要,提取 abundant [4'b8nd4nt] a.大量(充足)的;(in)丰富(富裕)的 abuse [4'bju:z] n.vt.滥用;虐待,伤害;辱骂,毁谤 academic [`1k4'dAmik] a.学校(院)的;...
使用JAVA控制AD域进行基本的操作详解
首先介绍一下AD域的用户
存储
,实际上就是一个ldap的目录
存储
过程,所以我们可以根据对ldap的访问模式访问到ad域上的对象,例如我想访问AD与上名为上海的OU下的一个用户test1,那么我可以访问“CN=test1,OU=上海,
DC
=...
电脑知识大全
电脑硬件知识大全(看完了你就
成
硬件高手了)电脑故障排除之“八先八后”网络诊所病历大公布机器响铃不断,这时,如果你知道响铃的含意,就不用去
请教
专业人员了。硬件故障判断如何预防使用软件引发电脑硬盘的六大...
图形处理/算法
19,472
社区成员
50,678
社区内容
发帖
与我相关
我的任务
图形处理/算法
VC/MFC 图形处理/算法
复制链接
扫一扫
分享
社区描述
VC/MFC 图形处理/算法
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章