C++如何设置像素颜色



我创建了一个代码,可以更改屏幕上的某些像素,但当我想更改更多像素时,程序的性能会减慢。你会看到小故障,它并不像它应该的那样漂亮。

问题:
如何提高代码的性能
如果我想更改更多像素或最终更改屏幕上的所有像素
我曾想过使用SETBITMAPBITS,但我不确定它是如何工作的。我对此没有任何经验。

还有其他解决方案吗?

我的代码示例:<控制台应用程序>

#define _WIN32_WINNT 0x601
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
HDC dng = GetDC(NULL);

while (true)
for (int i = 0; i <= 200; i++)
for (int j = 0; j <= 500; j++)
SetPixel(dng, i, j, RGB(0, 0, 255));
ReleaseDC(NULL, dng);
getchar();
}

如果我理解正确,您正在尝试在窗口外绘制。

每次SetPixel都会发送一条WM_PAINT消息,该消息会重新绘制整个窗口。这会大大降低你的程序速度。您应该使用GDI、GDI+或Direct2D创建位图或矩形,然后立即绘制。

在窗外画画从来都不是个好主意。你无法控制你刚刚画的东西,当有东西打断它时,它就会消失。

如果你想要一个没有标题栏的蓝色块,创建一个分层窗口,然后创建一个矩形并绘制它。

微软的文档可能不是教程,但内容丰富。

以下是Direct2D文档:https://learn.microsoft.com/en-us/windows/win32/direct2d/getting-started-with-direct2d

以下是如何创建分层窗口:https://learn.microsoft.com/en-us/windows/win32/winmsg/window-features#layered-windows

编辑:Comment表示SetPixel不发送WM_PAINT。我想说的是SetPixel重新粉刷窗户。

最新更新