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