提高setpixel()效率,即颜色值直接赋给位图显示的问题解决

在MFC项目中,为解决图像显示效率低下的问题,作者通过直接赋值方法替代SetPixel(),利用SetDIBits和SetBitmapBits API函数提高位图数据填充效率。项目涉及大量数据计算与图像表现,通过双缓冲和分块显示优化绘制过程。同时,讨论了其他提高效率的方案,如OPENGL、DIRECTX以及多线程创建后台临时文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在做的项目是在MFC的框架下的,我主要负责图像的绘制显示部分。是在对方框架下做插件功能,对方给出的绘图DEMO是用fillsolidrect()与SetPixel(),显示效率很低。项目的主要内容是把大量数据通过计算转换,然后赋予颜色值,通过图像来表现巨幅的井文件。呃,闲话不多说了~~~~~~~

我只说绘制部分,当然也是分块显示,即只绘当前屏幕内容,通过双缓冲实现,先绘制到内存DC,然后再贴到屏幕上。

我这两天做的修改是把效率极低的setpixel()用直接给点赋值的方法代替。就是相当于把表示颜色值BYTE的数组直接赋值给位图显示,而不是再经过先绘制到位图再显示。

考虑到效率,直接调用了API函数。经过查询有两个函数可以实现的比较好,这两个函数都能将位图数据填到位图中去,SetDIBits和SetBitmapBits,前者是对于设备无关位图的,后者是对相关位图的。

int SetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, CONST VOID *lpvBits,CONST BITMAPINFO *lpbmi, UINT fuColorUse);
参数:
hdc:指向设备环境中的句柄。
hbmp:指向位图的句柄。函数要使用指定DIB中的颜色数据对该位图进行更改。
uStartScan:为参数lpvBits指向的数组中的、与设备无关的颜色数据指定起始扫描线。
cScanLines:为包含与设备无关的颜色数据的数组指定扫描线数目。
lpvBits:指向DIB颜色数据的指针,这些数据存储在字节类型的数组中,位图值的格式取决于参数lpbmi指向的BITMAPINFO结构中的成员biBitCount。
lpbmi:指向BITMAPINFO数据结构的指针,该结构包含有关DIB的信息。

fuColorUse:指定是否提供了BITMAPINFO结构中的bmiColors成员,如果提供了,那么bmiColors是否包含了明确的RGB值或调色板索引。参数fuColorUse必须取下列值。

DIB_PAL_COLORS:颜色表由1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值