【发布时间】:2015-01-12 03:22:10
【问题描述】:
我有一个要显示为图像的二维数据数组。
计划是这样的 -
使用CreateCompatibleBitmap 创建位图(这会生成纯黑色位图,我可以毫无问题地显示它)
编辑此位图的像素以匹配我的数据
BitBlt 位图到窗口
我认为我需要一个指向内存中像素数据开始位置的指针。我已经尝试了许多不同的方法,并在谷歌上搜索了 3 天,但仍然无法编辑单个像素。
使用SetPixel(HDC, x, y, Color) 的循环来设置每个像素工作但非常缓慢。
我已经在 C# 中通过锁定位图和编辑位来实现这一点,但我是 C++ 新手,似乎不知道如何做类似的事情。
我一直在尝试使用memset(p, value, length)
对于“p”,我尝试使用从CreateCompatibleBitmap 返回的句柄、位图的 DC 和窗口的 DC。我已经尝试了各种值和长度的值。
我不确定这是否是正确的使用方法。
我不必使用位图,这只是我知道要做的唯一事情。实际上,找到一种直接更改主窗口 DC 的方法会很棒。 我确实想避免图书馆。我这样做纯粹是为了学习 C++。
【问题讨论】:
-
您首先准备像素数据,然后使用
CreateDIBSection创建位图。或者完全绕过位图,直接使用SetDIBitsToDevice从数据缓冲区渲染。 -
但是,如果您出于某种原因坚持要修改现有位图,
SetDIBits -
这是非常有用的信息,我将开始着手实施它。我仍然很好奇是否有办法逐像素更改内存中的位图,有点像编写我自己的 SetDIBits 函数。或者这会不会有点太难了?
-
好吧,如果你的意思是“逐像素”字面意思,那就是
SetPixel -
在我看来,您主要是在学习低级 C Windows API。可能有用,可能很有趣,但肯定不是 c++。至少不是 21 世纪的 c++