C++ 设置单个像素的最有效方法WinAPI C++;

C++ 设置单个像素的最有效方法WinAPI C++;,c++,winapi,C++,Winapi,简介: 谢谢你阅读这篇文章。我是C++的相对新手,对WiAPI非常新。 目标: 我正在尝试开发一个2D游戏(我知道在深水区潜水)。我想制作一个带有运动图像的窗口(在WinAPI中)(以构成背景和精灵等),但是我想使用需要反应纹理的自定义图像格式(类似于CGI中的凹凸贴图) 问题: 在窗口内设置单个像素的最有效(处理方面)方法是什么?(C++中用WinAPI)< /P> 旁注: 如果不能单独使用C++来有效地设置像素,那么我将很乐意学习汇编。 结束: 感谢您的时间和知识。创建具有所需像素尺寸的内存

简介: 谢谢你阅读这篇文章。我是C++的相对新手,对WiAPI非常新。 目标: 我正在尝试开发一个2D游戏(我知道在深水区潜水)。我想制作一个带有运动图像的窗口(在WinAPI中)(以构成背景和精灵等),但是我想使用需要反应纹理的自定义图像格式(类似于CGI中的凹凸贴图)

问题: 在窗口内设置单个像素的最有效(处理方面)方法是什么?(C++中用WinAPI)< /P> 旁注: 如果不能单独使用C++来有效地设置像素,那么我将很乐意学习汇编。 结束:
感谢您的时间和知识。

创建具有所需像素尺寸的内存位图。根据需要将像素绘制到该位图。每当一个或多个像素发生变化时,调用
invalidate()
向操作系统发出信号,表示窗口需要重新绘制。每当窗口出于任何原因收到
WM_PAINT
消息时,只需
BitBlt()
/
StretchBlt()
当前位图(或者,至少是与
GetClipBox()
GetClipRgn()
报告的当前剪切区域相对应的位图部分)进入由
BeginPaint()
返回的
HDC


或者,使用
WS_EX_LAYERED
扩展窗口样式创建窗口,然后创建具有相同尺寸的位图,并使用
UpdateLayeredWindow()
在位图像素发生变化时直接将最新位图指定给窗口。在这种情况下,无需处理
WM_PAINT
。有关更多详细信息,请参阅。

在您开始以非常困难和低效的方式推进像素之前,您是否应该先使用更主流的方法,如SFML或SDL?无论那些“反应性纹理”是什么,都很可能使用GPU着色器来实现。“最有效”的确切含义是什么?先定义,然后测量。在编写代码之前仔细思考是徒劳的。@idclev463035818我对代码的效率一无所知,但举例来说,我的意思是,你不会使用“Bitblt”来编写游戏,因为它效率太低。不要预先担心效率。你必须先学习C++。首先让某些东西工作起来,然后利用这些经验来构建更好的东西。@如果您想处理单个像素,并且认为BitBlt比这慢,这表明您存在一些严重的误解。老实说,你还没有准备好投入这个项目。你首先需要掌握基础知识。没有捷径。干杯,我一定要试一试。