IAMsuyuhui
IAMsuyuhui
采纳率75%
2018-03-29 10:28

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

40
已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

2条回答

  • cplusplus_zk cplusplus_zk 3年前

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

    点赞 3 评论 复制链接分享
  • SecretGarden SecretGarden 3年前

    最高效的方法是创建一副位图对象,然后锁定其缓冲区,在缓冲区中直接对颜色矩阵进行修改,然后再将位图渲染到界面上:
    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);

    点赞 评论 复制链接分享

为你推荐