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.
我创建了一个代码来更改屏幕上的某些像素,但是当我想更改更多像素时,程序的性能会变慢。
你会看到小故障,它并不像它应该的那样漂亮。
问题:
我怎样才能提高代码的性能。
如果我想更改更多像素或最终更改屏幕上的所有像素。
我考虑过使用 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.