C言語関係掲示板

過去ログ

No.198.グラフィックスとは??


No.1246

グラフィックスとは??
投稿者---こういち(2002/03/13 01:32:40)


C言語でグラフィックス(点描、線分、閉曲線とその塗りつぶしを基本とした画像処理)を扱うには、どういった手続きをとるとよいのか教えてください。おねがいしまーす。

No.1249

Re:グラフィックスとは??
投稿者---B.Smith(2002/03/13 11:27:03)


こんにちは。

グラフィック描画(入出力処理)は、ハードウエアやOSに完全に依存します。また、コンパイラによっては、グラフィックライブラリを持っていないものもあります。そのため、「C言語で〜」と大きな括りでは説明することができません。例えば、Borland C++やMS-C、Windowsのプログラム、それぞれで違いが発生します。
グラフィック描画をすべて説明するのは掲示板上では難しいので、ライブラリリファレンスを参照してください。また、Windowsの描画の場合はWindowsプログラミングの書籍を参照することをお勧めします。

LSI-C試食版にはグラフィックライブラリは無いようです。一応、LSI-C試食版でグラフィックを描画するサンプルをご紹介しておきます。完全に理解するつもりなら、ちょっとだけ上級者向けです。
このサンプルはビデオBIOSを制御して点を描画します(MS-DOS)。ビデオBIOSには、任意に点を描画する処理0chがありますので、線、四角形、円は、この「点の描画処理」を連続して呼び出すようになります。
LSI-C試食版でグラフィック描画を行うサンプル.
#include <dos.h>
#include <conio.h>

void    Rectangle(int ,int ,int ,int ,unsigned char );
void    SetVideoMode(void );
void    PutPoint(int ,int ,unsigned char );

void main(void )
{
    SetVideoMode();

    Rectangle(300,300,400,400,0x7);

    while(!kbhit());getch();
}

/* 四角形の描画 */
void    Rectangle(int x1,int y1,int x2,int y2,unsigned char Color)
{
    int     Idx;

    for(Idx = x1;Idx <= x2;Idx++){
        PutPoint(Idx,y1,Color);
        PutPoint(Idx,y2,Color);
    }

    for(Idx = y1;Idx <= y2;Idx++){
        PutPoint(x1,Idx,Color);
        PutPoint(x2,Idx,Color);
    }
}

/* ビデオモード切替 */
void    SetVideoMode(void )
{
    union REGS      parm,out;

    parm.x.ax = 0x12;   /* モード12h */
    int86(0x10,&parm,&out);
}

/* 点の描画 */
/* ここでは関数int86を使用していますが、この処理は頻繁に呼び出されることになるので */
/* 本来は完全にアッセンブラで作成した方が効率的です                                */
void    PutPoint(int x,int y,unsigned char Color)
{
    union REGS      parm,out;

    parm.x.cx   = x;    /* x座標 */
    parm.x.dx   = y;    /* y座標 */
    parm.h.al   = Color;/* 色(DOSパレット番号) */
    parm.h.ah   = 0xc;  /* 点の書き込み */
    parm.x.bx   = 0;    /* ページゼロ */

    int86(0x10,&parm,&out);
}




戻る


「初心者のためのポイント学習C言語」 Last modified:2002.05.14
Copyright(c) 2000-2002 TOMOJI All Rights Reserved