| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 577 人关注过本帖
标题:[求助]已知一个DC场景,怎样保存为一个.bmp文件??
只看楼主 加入收藏
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
结帖率:100%
收藏
 问题点数:0 回复次数:2 
[求助]已知一个DC场景,怎样保存为一个.bmp文件??
最好不要用MFC类,用纯C写
开头已经写好了:
BOOL SaveToBMP(HDC hdc, //设备场景
LPCTSTR path, //保存路径
long width, //高度
long hetght //宽度
)

{
...后面怎么写?帮帮我好吗?
}
搜索更多相关主题的帖子: bmp 文件 保存 
2007-03-12 17:19
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 

期待高手,以前想做抓图软件,但是不知道保存...


2007-03-12 18:06
psusfy
Rank: 1
等 级:等待验证会员
帖 子:2
专家分:0
注 册:2006-5-28
收藏
得分:0 
回复:(flyue)[求助]已知一个DC场景,怎样保存为一个...

精简的代码,可以编译运行,可以方便的直接改成单独的函数.

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)
{
int sWidth, sHeight,i;
HDC hdc,mhdc ;
TCHAR szFileName[100],szMsg[200];
BYTE *bmBuffer;
DWORD size;
unsigned long ensize=0;
HBITMAP bm;
BITMAP bitmap;
HANDLE hFile;

hdc = CreateDC (TEXT ("DISPLAY"), NULL, NULL, NULL);
sWidth=GetSystemMetrics(SM_CXSCREEN);
sHeight=GetSystemMetrics(SM_CYSCREEN);

bm=CreateCompatibleBitmap(hdc,sWidth,sHeight);
mhdc=CreateCompatibleDC(hdc);
SelectObject(mhdc,bm);
// pOld=(HBITMAP)SelectObject(mhdc,bm);
BitBlt(mhdc,0,0,sWidth,sHeight,hdc,0,0,SRCCOPY);
// SelectObject(mhdc,pOld);

GetObject(bm,sizeof(BITMAP),(void *)&bitmap);
size=bitmap.bmWidthBytes *bitmap.bmHeight ;

bmBuffer=new BYTE[size];

BITMAPINFOHEADER bih;
bih.biBitCount=bitmap.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=bitmap.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=bitmap.bmWidth ;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;

GetDIBits(mhdc,bm,0,sHeight,bmBuffer,(BITMAPINFO*)&bih,DIB_RGB_COLORS);

BITMAPFILEHEADER bfh;
bfh.bfReserved1=bfh.bfReserved2=0;
bfh.bfType=((WORD)('M'<< 8)|'B');
bfh.bfSize=0x36+size;
bfh.bfOffBits=0x36;

/* hFile=_lcreat(szFileName,0);
_lwrite(hFile,(char *)&bfh,sizeof(BITMAPFILEHEADER));
_lwrite(hFile,(char *)&bih,sizeof(BITMAPINFOHEADER));
_lwrite(hFile,(char *)bmBuffer,size);
_lclose(hFile);
*/
wsprintf(szFileName,TEXT("d:\\ScreenShoter.bmp"));
hFile=CreateFile(szFileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);

WriteFile(hFile,&bfh,sizeof(BITMAPFILEHEADER),&ensize,NULL);
WriteFile(hFile,&bih,sizeof(BITMAPINFOHEADER),&ensize,NULL);
WriteFile(hFile,bmBuffer,size,&ensize,NULL);
CloseHandle(hFile);

wsprintf(szMsg,TEXT("%d Height , %d Width , %d BITS ,%d WidthBytes\n%l Bytes Saved to bmp"),bitmap.bmWidth ,bitmap.bmHeight,bitmap.bmBits,bitmap.bmWidthBytes,(long)size);
MessageBox(NULL,szMsg,"Screen",0);


return 0;
}


86RobkH4.txt (2.21 KB) [求助]已知一个DC场景,怎样保存为一个.bmp文件??


2007-03-13 20:14
快速回复:[求助]已知一个DC场景,怎样保存为一个.bmp文件??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016849 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved