......
BITMAPINFOHEADER bi; bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = bmpScreen.bmWidth;
bi.biHeight = bmpScreen.bmHeight;
bi.biPlanes = ;
bi.biBitCount = bmpScreen.bmBitsPixel;
bi.biCompression = BI_RGB;
bi.biSizeImage = ;
bi.biXPelsPerMeter = ;
bi.biYPelsPerMeter = ;
bi.biClrUsed = ;
bi.biClrImportant = ; DWORD dwBmpSize = ((bmpScreen.bmWidth * bi.biBitCount + ) / ) * * bmpScreen.bmHeight; cBmpData = new unsigned char[dwBmpSize ];

GetDIBits(hdcScreen, hbmScreen, , (UINT)bmpScreen.bmHeight, cBmpData, (BITMAPINFO *)&bi, DIB_RGB_COLORS); DeleteObject(bmpScreen); ReleaseDC(hdcScreen);

return cBmpData;
} <---运行到这里时提示堆栈损坏

这是因为其实GetDIBits的第五个参数需要的其实是一个BITMAPINFO结构,而我们传入的是BITMAPINFOHEADER。

如果在位图不小于16位时,这是可行的。但是在位图小于16位时,它还需要另外的内存空间来储存一个调色板数据,所以就会发生堆栈损坏的错误。

正确的做法是这样的

struct { BITMAPINFO info; RGBQUAD moreColors[]; } fbi;
BITMAPINFOHEADER &bi = fbi.info.bmiHeader;
bi.biSize = sizeof(BITMAPINFOHEADER);
...
GetDIBits(..., &fbi.info, ...);

最新文章

  1. 学习python
  2. java基础练习 字符串,控制流,日历,日期等
  3. android MD5加密
  4. TextSwitcher 简单用例
  5. Codeforces Round #371 (Div. 1)
  6. CSS3 perspecitve属性
  7. Lua之元表
  8. AndrdoidStudio 2个jar包引起的异常Duplicate files copied in APK META-INF/LICENSE.txt
  9. MySQL约束
  10. Android项目开发全程(三)-- 项目的前期搭建、网络请求封装是怎样实现的
  11. DDoS deflate - Linux下防御/减轻DDOS攻击
  12. Android中半透明Activity效果另法
  13. 优质办公体验,掌上OA一机hold住全场
  14. 生产者消费者的java实现
  15. 系列文章|OKR与敏捷(二):实现全栈敏捷
  16. 利用content为伊特元素追加三个小点
  17. LoadRunner录制协议的选择
  18. php一致性hash算法
  19. java 字符转换流
  20. ThinkPhp框架开发微信支付——刷卡支付

热门文章

  1. checkbox 框 选中判断
  2. Django 配置访问静态文件
  3. (转)python time模块和datetime模块详解
  4. mac下 mysql 插入中文乱码解决
  5. c++ 常用的遍历,删除,分割等等文件处理函数代码实现
  6. SQL Cookbook—插入、更新与删除
  7. Centos 从零开始 (一)
  8. java利用直方图实现图片对比
  9. so模块加载后数据问题
  10. flask 继承模版的基本使用1