如何在C中使用putpixel()时获得高帧速率?

8yparm6h  于 2023-04-19  发布在  其他
关注(0)|答案(2)|浏览(111)

我在用一个代码打印像素。

// C code

#include <graphics.h>
#include <conio.h>

int main()
{
    int gd = DETECT, gm;

     initgraph(&gd, &gm, "C:\\TC\\BGI");

     for (int i = 0; i < 100; i++)
     {
         for(j = 0; j < 200; j++)
         {
             putpixel(i, j, GREEN);
         }
     }

     getch();
     closegraph();
     return 0;
}

在这段代码中使用putpixel()时,有没有什么方法可以让C编译器获得更快的响应?控制台在执行putpixel()时着色的速度非常慢,所以我想知道是否有其他库可以在Windows系统或Linux系统上使用C来加速屏幕上的打印像素过程?

k5hmc34c

k5hmc34c1#

恐怕答案几乎总是“不要使用putpixel()”。
问题是,它需要大量的工作来实现这么少(一个像素的变化!),你必须做成千上万次,才能做任何有用的事情。
在一个理想的世界里,你可能希望这一切都是内联的,并优化到你真正需要的,但如果putpixel()处理许多不同的屏幕格式(从我对BGI的记忆来看,它确实如此),那么这将需要非常不可能的内联和循环非切换程度。
你要做的是找到一个更高级的操作,比如putimage(),或者在你的简单示例中是bar(),它可以通过一个函数调用实现更多功能。
您可能希望迁移到更面向性能的东西,如SDL,但如果您试图对每个像素使用函数调用,您仍然会遇到相同的基本问题。

2uluyalo

2uluyalo2#

putpixel()是相当慢的,无论你使用哪个框架或库。尝试创建一个位图,并计算每个像素的内存地址自己。
允许您做这样的事情的跨平台框架是SDLAllegro
参见:

相关问题