C++ 如何设置像素颜色

C++ How to set pixel colors

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

问题:
我怎样才能提高代码的性能。
如果我想更改更多像素或最终更改屏幕上的所有像素。
我考虑过使用 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();
}

如果我没理解错的话,你是想在 window 之外绘制。

每次你 SetPixel 发送一条 WM_PAINT 消息,它会重绘整个 window。 这会大大减慢您的程序。你应该做的是使用 GDI、GDI+ 或 Direct2D 创建位图或矩形,然后立即绘制它。

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

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

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

这是 Direct2D 文档: https://docs.microsoft.com/en-us/windows/win32/direct2d/getting-started-with-direct2d

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

编辑: 评论说 SetPixel 没有发送 WM_PAINT。我的意思是 SetPixel 重绘 window.