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

时间:2015-06-01 02:41:58

标签: c performance graphics pixel bgi

我正在使用代码来打印像素。

// 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系统上使用C或者使用C来加速屏幕上的打印像素处理Linux one?

2 个答案:

答案 0 :(得分:2)

我担心答案几乎总是“不要使用putpixel()&#34;。

问题在于它需要做很多工作才能实现这么少(一个像素的变化!),并且在你做了任何有用的事情之前你必须完成数万次。

在一个理想的世界中,你可能希望所有内容都被内联并优化到你真正需要的东西,但是如果putpixel()处理许多不同的屏幕格式(以及我记得的BGI,它确实如此)这需要极不可能的内联程度和循环开关。

您要做的是找到更高级别的操作,例如putimage(),或者在您的简单示例中bar(),这可以通过单个函数调用实现更多功能。

您可能希望转向更像性能的SDL,但如果您尝试对每个像素使用函数调用,那么您仍会遇到相同的基本问题。

答案 1 :(得分:1)

putpixel()非常慢,无论您​​使用哪个框架或库。尝试创建一个位图并自己计算每个像素的内存地址。

允许您执行此类操作的跨平台框架是SDLAllegro

另见: