新手求教屏幕抓取问题

fsdr4546yty 2006-09-07 06:37:33
我有一个抓取当前屏幕的代码,但抓出来的图像保存成文件时太大了(为3M),想把它变小一点。不抓那么多的数据。请问有什么好办法
代码如下:
     CDC dc;//屏幕DC
dc.CreateDC("DISPLAY",NULL,NULL,NULL);
// CDC *dc=GetDC();

CBitmap bm;//创建位图
int Width=GetSystemMetrics(SM_CXSCREEN);
int Height=GetSystemMetrics(SM_CYSCREEN);
bm.CreateCompatibleBitmap(&dc,Width,Height);

CDC tdc;//内存位图
tdc.CreateCompatibleDC(&dc);
CBitmap*pOld=tdc.SelectObject(&bm);
tdc.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);
tdc.SelectObject(pOld);

bm.GetBitmap(&btm);//保存信息至btm
size=btm.bmWidthBytes*btm.bmHeight;

    lpData=new char[size]; //图像数据

BITMAPINFOHEADER bih;
bih.biBitCount=btm.bmBitsPixel;
bih.biClrImportant=0;
bih.biClrUsed=0;
bih.biCompression=0;
bih.biHeight=btm.bmHeight;
bih.biPlanes=1;
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biSizeImage=size;
bih.biWidth=btm.bmWidth;
bih.biXPelsPerMeter=0;
bih.biYPelsPerMeter=0;
///////////////////////////////////
GetDIBits(dc,bm,0,bih.biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);

保存以后lpData为1024*768*4字节啊……晕
...全文
389 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenming123 2006-09-08
  • 打赏
  • 举报
回复
bih.biBitCount=btm.bmBitsPixel;

改为

bih.biBitCount=8,16,24
就可以保存为8位,16位或24位位图.
fsdr4546yty 2006-09-08
  • 打赏
  • 举报
回复
不转换成JPG就没有更好的办法了吗?
DentistryDoctor 2006-09-07
  • 打赏
  • 举报
回复
BMP=>JPG?
蒋晟 2006-09-07
  • 打赏
  • 举报
回复
blog.joycode.com/jiangsheng/posts/10410.aspx
fsdr4546yty 2006-09-07
  • 打赏
  • 举报
回复
怎么降低颜色位数………………。?
给个具体代码或示例好吗?
谢谢
baojian88888 2006-09-07
  • 打赏
  • 举报
回复
降低颜色位数
或者 转成JPG格式

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧