小编Kiv*_*ivi的帖子

在 GDI 中设置像素的高效方法

我创建了一个基本程序,使用该SetPixel()方法在 Windows 控制台中渲染精灵,它工作正常,但开销很大。我对此做了一些优化,这有所帮助,但仍然太慢。

目前,我的程序使用两个缓冲区COLORREF将较新的缓冲区绘制到屏幕上,交换它们并重新开始。然而,如果该像素发生变化,它只会重新绘制该像素。这极大地提高了性能,但仍然很慢。到目前为止,缓冲区交换还没有用指针完成,但真正的开销是SetPixel()这样的,我正在寻找一种使用 GDI 创建像素级图形的替代方法,它比SetPixel() (忽略 anim_frame 和 img_data 向量的第一个维度)更快,如果我决定添加动画对象,它们就在那里)

void graphics_context::update_screen()
{
update_buffer();

for (int x = 0; x < this->width; x++)
{
    for (int y = 0; y < this->height; y++)
    {
        if (this->buffer.at(x).at(y) != this->buffer_past.at(x).at(y))
        {
            for (int i = 0; i < this->scale_factor; i++)
            {
                for (int j = 0; j < this->scale_factor; j++)
                {
                    int posX = i + (this->scale_factor  * x) + this->width_offset;
                    int posY = …
Run Code Online (Sandbox Code Playgroud)

c++ gdi

6
推荐指数
1
解决办法
3657
查看次数

标签 统计

c++ ×1

gdi ×1