我正在处理打印像素的代码。
// 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来加速屏幕上的打印像素过程?
恐怕答案几乎总是"不要使用putpixel()
"。
问题是,它需要大量的工作来实现这么小的(一个像素的变化!),在你做任何有用的东西之前,你必须做成千上万次。
在一个理想的世界里,你可能希望它都被内联和优化到你真正需要的,但是如果putpixel()
处理许多不同的屏幕格式(从我对BGI的记忆来看,它确实如此),那么这将需要高度不可能的内联和循环切换程度。
您要做的是找到一个更高级的操作,如putimage()
,或在您的简单示例bar()
中,它可以通过单个函数调用实现更多。
您可能希望转向更面向性能的东西,如SDL,但如果您尝试对每个像素使用函数调用,您仍然会遇到相同的基本问题。
putpixel()
相当慢,无论您使用哪个框架或库。尝试创建一个位图,并计算每个像素的内存地址。
允许你这样做的跨平台框架是SDL和Allegro。
参见:
- http://lazyfoo.net/SDL_tutorials/