1

ピクセルを印刷するコードを扱っていました。

// 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の?

4

2 に答える 2

2

残念ながら、ほとんどの場合、答えは「使用しないputpixel()」です。

問題は、ほんのわずか (1 ピクセルの変更!) を達成するのに多くの作業が必要であり、何か有用なことを行う前に何万回も実行する必要があることです。

理想的な世界では、すべてがインライン化され、本当に必要なものまで最適化されることを望むかもしれませんが、putpixel()多くの異なる画面フォーマットを処理する場合 (そして、私が BGI について覚えていることによると、そうです)、非常にありそうもない程度のインライン化が必要になります。とループの切り替えを解除します。

あなたがしたいのは、 のようなputimage()、または単純な例のような、より高レベルの操作を見つけることですbar()。これにより、単一の関数呼び出しでより多くのことを達成できます。

おそらく、SDL のようなよりパフォーマンス指向のものに移行したいと思うでしょうが、すべてのピクセルに対して関数呼び出しを使用しようとすると、依然として同じ基本的な問題が発生します。

于 2015-06-01T08:21:45.610 に答える
1

putpixel()使用するフレームワークやライブラリに関係なく、かなり遅いです。ビットマップを作成して、各ピクセルのメモリ アドレスを自分で計算してみてください。

このようなことを可能にするクロスプラットフォーム フレームワークは、SDLAllegroです。

以下も参照してください。

于 2015-06-01T08:01:43.177 に答える