phoenix8956 2015-08-13 10:55 采纳率: 16.7%
浏览 1484

截屏,不知道哪里出了问题,打开图片不显示

#include
#include
int main()
{

HWND hwin;

HDC dc,memdc;
HBITMAP hbitm,hold;
char *pchar,*mloc;
RECT rect;
int cx,cy,recnum;
hwin=GetDesktopWindow();//获取桌面窗口句柄
dc=GetWindowDC(hwin);//获取桌面窗口DC
GetWindowRect(hwin,&rect);//获取桌面窗口大小
cx=rect.right-rect.left;
cy=rect.bottom-rect.top;
memdc=CreateCompatibleDC(dc);//创建与桌面窗口DC相适应的内存DC
hbitm=CreateCompatibleBitmap(dc,cx,cy);//创建相适应的位图
SelectObject(memdc, hbitm);//将新建的位图选入内存DC中
BitBlt(memdc,0,0,cx,cy,dc,0,0,SRCCOPY);
////////////////////////////////////////////////////////////////////////////////////////////////
BITMAPINFOHEADER bih = {0};//位图信息头
bih.biBitCount =24;// bmp.bmBitsPixel;//每个像素字节大小

bih.biCompression = BI_RGB;
bih.biHeight = cy;//高度

bih.biPlanes = 1;
bih.biSize = sizeof(BITMAPINFOHEADER);
bih.biSizeImage = cx*cy*3;//图像数据大小
bih.biWidth = cx;//宽度

BITMAPFILEHEADER bfh = {0};//位图文件头
bfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);//到位图数据的偏移量
bfh.bfSize = bfh.bfOffBits + cx*cy*3;//文件总的大小
bfh.bfType = (WORD)0x4d42;

mloc=new char[cx*cy*3];//申请空间来存放图像数据

recnum=GetDIBits(memdc,hbitm,cx,cy,mloc,(BITMAPINFO*)&bfh, DIB_RGB_COLORS);//获取位图数据
FILE *stream;

if ((stream = fopen("截屏.bmp", "wb")) == NULL) /* open file TEST.$$$ */
{
    fprintf(stderr, "Cannot open output file.\n");
    return 1;
}

fwrite(&bfh, sizeof(BITMAPFILEHEADER), 1, stream);
fwrite(&bih, sizeof(BITMAPINFOHEADER), 1, stream);
fwrite(mloc, cx*cy*3, 1, stream);

fclose(stream); /*关闭文件*/
return 0;

}

  • 写回答

2条回答 默认 最新

  • devmiao 2015-08-13 10:59
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退