微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c ++更改位图中的值

我试图改变“cool.bmp”图像中的像素,并将其绘制到更改的窗口。 到目前为止所有的代码正确执行,但是当我更改pix数组中的字节图像不会改变(是的,即时通讯重画屏幕)。

case WM_CREATE:// runs once on creation of window hBitmap = (HBITMAP)LoadImage(NULL,L"cool.bmp",IMAGE_BITMAP,LR_LOADFROMFILE ); if(hBitmap == NULL) ::printToDebugWindow("Error: loading bitmapn"); else { BYTE* b = ::getPixArray(hBitmap); for(int i = 0; i< 1920*1080*4; i+=4) // problem!! { b[i] = 255;//blue b[i+1] = 255;//green b[i+2] = 255;//red b[i+3] = 255;//alpha }

//从位图图像获取pixArray的方法

BYTE* getPixArray(HBITMAP hBitmap) { HDC hdc,hdcmem; hdc = GetDC(NULL); hdcmem = CreateCompatibleDC(hdc); BITMAPINFO MyBMInfo = {0}; MyBMInfo.bmiHeader.biSize = sizeof(MyBMInfo.bmiHeader); // Get the BITMAPINFO structure from the bitmap if(0 == GetDIBits(hdcmem,hBitmap,NULL,&MyBMInfo,DIB_RGB_COLORS)) { ::printToDebugWindow("FAILn"); } // create the bitmap buffer BYTE* lpPixels = new BYTE[MyBMInfo.bmiHeader.biSizeImage]; MyBMInfo.bmiHeader.biBitCount = 32; MyBMInfo.bmiHeader.biCompression = BI_RGB; MyBMInfo.bmiHeader.biHeight = (MyBMInfo.bmiHeader.biHeight < 0) ? (-MyBMInfo.bmiHeader.biHeight) : (MyBMInfo.bmiHeader.biHeight); // get the actual bitmap buffer if(0 == GetDIBits(hdcmem,MyBMInfo.bmiHeader.biHeight,(LPVOID)lpPixels,DIB_RGB_COLORS)) { ::printToDebugWindow("FAILn"); } return lpPixels; }

看起来像这样的代码ontop应该将图像中的所有图像变成白色? 但是没有效果

BYTE* b = ::getPixArray(hBitmap); for(int i = 0; i< 1920*1080*4; i+=4) // problem!! { b[i] = 255;//blue b[i+1] = 255;//green b[i+2] = 255;//red b[i+3] = 255;//alpha }

如何使用win32 API将位图复制到剪贴板?

有没有办法使用本机C ++从WPF窗口捕获位图?

何时处理graphics对象

快速/简单的方法将Windows位图旋转90度?

创build内存设备上下文…为一个位图,而不是一个设备(不显示

BITMAPINFO结构的bmiColors字段

GDI GradientFill不能在离屏位图上工作

C ++从8位位图构build像素数据并访问bmiColor表信息

Windows编程DialogBox背景图片

复制另一个HBITMAP的位图

GetDIBits()只是将位图复制到缓冲区。 您需要在修改缓冲区后使用SetDIBits()将其设置回HBITMAP。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐