MFC设置区域每个像素点颜色并绘制出来

如题 336*256 矩形 目前使用CDC::SetPixel 这样每个点去画效率太低有没有更好的方法

这种情况常规的做法是生成一个内存DC,然后用SetPixel函数往内存DC上画东西,最后用BitBlt函数把内存DC给拷贝到屏幕上去。
如果希望速度更快,那可以生成一个设备无关位图,然后直接去操作内存,最后显示到屏幕上去。

最高效的方法是创建一副位图对象,然后锁定其缓冲区,在缓冲区中直接对颜色矩阵进行修改,然后再将位图渲染到界面上:
1、创建 Bitmap 对象;
2、用 LockBits 获得位图原始数据缓冲区;
3、在缓冲区上应用任何图像处理操作,包括像素赋值;
4、用 UnlockBits 提交缓冲区数据到位图对象;
5、将位图对象渲染到DeviceContext。

参考代码:

// 获取位图缓冲区
BitmapData bitmapData;
pBitmap->LockBits(&Rect(0,0,pBitmap->GetWidth(), pBitmap->GetHeight()), ImageLockModeWrite, PixelFormat32bppARGB, &bitmapData);

// 获得缓冲器地址
unsigned int pRawBitmapOrig = (unsigned int)bitmapData.Scan0;

// 编辑像素值
....

// 提交修改到位图对象
pBitmap->UnlockBits(&bitmapData);