C言語関係掲示板

過去ログ

No.310.グラフィックの環境

[戻る] [ホームページ]
No.1885

グラフィックについて教えてください!
投稿者---kokko(2002/06/30 19:55:47)


教えてください!
MicroSoftのCでグラフィックを書きたいんですけど
<graphics.h>がどうしてもインクルードされません。
どうしてなんでしょう?
何かやり方があるのでしょうか???

画面の4隅にそれぞれ(左上隅:緑色、右上隅:水色、左下隅:赤、右下隅:紫)の点を描き、画面中央に茶色の点を描きなさい。
という問題です。

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

main()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");

putpixel(0,0,2);
putpixel(639,0,3);
putpixel(0,399,4);
putpixel(639,399,5);
putpixel(320,200,6);

getch();
closegraph();

return(0);
}



No.1886

Re:グラフィックについて教えてください!
投稿者---ともじ(2002/06/30 22:36:02)


こんばんは。

>MicroSoftのCでグラフィックを書きたいんですけど
><graphics.h>がどうしてもインクルードされません。
>どうしてなんでしょう?

ひょっとして、Turbo-CでのBGI Errorのことでしょうか。
http://www.borland.co.jp/qanda/lang/l0001909.html

これは、カレントディレクトリにDOSVGA.BGIを置くか
initgraph(&gd,&gm,""); の""にbgiディレクトリまでのパス
(例えば "c:\\tc4\\bgi" )を書くと直りますよ。

No.1893

Re:グラフィックについて教えてください!
投稿者---B.Smith(2002/07/01 19:06:14)


こんばんは。

>MicroSoftのCでグラフィックを書きたいんですけど
><graphics.h>がどうしてもインクルードされません。
>どうしてなんでしょう?
#include<graphics.h>
#include<conio.h>

main()
{
    int gd=DETECT,gm;

    initgraph(&gd,&gm,"");

    putpixel(0,0,2);
    putpixel(639,0,3);
    putpixel(0,399,4);
    putpixel(639,399,5);
    putpixel(320,200,6);

    getch();
    closegraph();

    return(0);
}


なるほど。確かにBorland系のグラフィック関数を使用しています。
もしかしたら、そのままMS-Cに移植しようとしているのかもしれませんね…

>kokkoさん

もし、今使用しているコンパイラが32bit(最近のVisual C++)であるならば、このソースでは目的は達成出来ません。
32bitのコンパイラはグラフィックライブラリを持っていません。これは、グラフィック機能をOS(Windows)自体が提供しているためで、描画処理をライブラリとしてコンパイラが用意する必要が無いからです。そのため、32bitコンパイラを使用する場合には、Windowsアプリケーションとして作成しなければなりません。

このソースを使用したいのであれば、まず16bitコンパイラを用意する必要がありますが、あらゆる意味で入手が困難だと思います。LSI-C試食版等、フリーで16bitコンパイラを入手することは一応可能なのですが、これらはグラフィックライブラリを持っていませんので、グラフィックライブラリを探してくるか、描画処理を全て自作するしかありません。何れにせよ、一筋縄では行かないということです。

以下の説明は16bitコンパイラを使用している事が前提です。

MS-Cでは、グラフィック関数のインクルードヘッダは、graphics.hではなくgraph.hになります。

上記のソースで使用されている関数は、MS-Cのグラフィックライブラリ内には存在しません。
これと同じ処理をMS-Cで行う場合、以下のようになります。
例.
#include <graph.h>
#include <conio.h>

void main(void )
{
    /* このモードでは640×480です */
   if(!_setvideomode(_VRES16COLOR))
        return;

    _setcolor(2);   _setpixel(0,0);
    _setcolor(3);   _setpixel(640-1,0);
    _setcolor(4);   _setpixel(0,480-1);
    _setcolor(5);   _setpixel(640-1,480-1);
    _setcolor(6);   _setpixel(640/2,480/2);

    getch();

   _setvideomode( _DEFAULTMODE );
}





No.1940

Re:グラフィックについて教えてください!
投稿者---kokko(2002/07/03 22:11:28)


>>B.Smithさん

>こんばんは。

ご解説ありがとうございました。
例にあげていただいたとおりに、プログラムを作ってみましたが、
やはりエラーになってしまいました。
エラー内容は同じで、graph.hがインクルードされませんでした。
なぜなのでしょう???

No.1981

Re:グラフィックについて教えてください!
投稿者---B.Smith(2002/07/06 17:02:19)


こんにちは。

使っているコンパイラ等の環境は、最初のうちに、なるべく詳しく教えてくださいね。
言いたくない、ということもあるかもしれませんが、環境によって回答する人や説明の内容が大きく変わってきますから。

>例にあげていただいたとおりに、プログラムを作ってみましたが、
>やはりエラーになってしまいました。
>エラー内容は同じで、graph.hがインクルードされませんでした。
>なぜなのでしょう???

私の説明の仕方が悪かったようです。

Microsoftは、今までに数多くのC/C++コンパイラを発売しています。Visual C++ 1.51までが16bitコンパイラ、それ以降が32bitコンパイラになっています。従ってVisual C++ 6.0は32bitコンパイラです。
16bitコンパイラは、主にMS-DOSのアプリケーションを開発することが目的で、グラフィックライブラリを持っていますので、前に説明したサンプルプログラムが使用出来ます。32bitコンパイラは主にWindowsアプリケーションの開発が目的で、グラフィックライブラリは持っていませんので、あのサンプルプログラムをコンパイルすることは出来ません。つまり、貴方が使っているVisual C++ 6.0ではコンパイル出来ません。
32bitコンパイラでグラフィック描画プログラムを作成する場合は、Windows用のプログラミング方法を習得しなければなりませんが、これはC(C++)の応用編であり、Windows上で動作させるための約束事が多いので、Cの初心者向けとは言えません。

Visual C++ 6.0でのCの勉強は、標準入出力を中心としたテキストベースのプログラムに限ります。グラフィック描画の勉強は、他のコンパイラを探してくるか、その部分の勉強を先送りにするしかありません。Windowsプログラミングを習得すれば不可能ではありませんが、Cの基礎的な勉強から大きく逸脱してしまうので、現段階ではお勧めできません。


No.1938

Re:グラフィックについて教えてください!
投稿者---kokko(2002/07/03 22:06:11)


こんばんは。解説ありがとうございました。
返答遅れてすみません。

>ひょっとして、Turbo-CでのBGI Errorのことでしょうか。

Turbo-CでのBGI Errorとはなんのことでしょうか。
教えて頂いたホームページにも行ってみましたが、
やはりわかりませんでした。
そもそもTurbo-Cの意味さえわかりません。
Turbo-CとC++とは関係あるのですか?
プログラムは初心者でまだわからない事だらけなので
基本的な質問になってしまいますが、よろしくお願いします。


No.1943

Re:グラフィックについて教えてください!
投稿者---ともじ(2002/07/03 23:33:43)


こんばんは。

>そもそもTurbo-Cの意味さえわかりません。
>Turbo-CとC++とは関係あるのですか?

ご提示のプログラムはBorland社の開発しているTurbo-CやTurbo-C++で
使われているグラフィックの関数を使っています。ですので、BGIエラー
のことを言っているのかと思いました。

CもC++も多くの会社がコンパイラを開発しており、そのコンパイラに
よって使える関数も異なってきます。kokkoさんが提示したプログラム
は、Borland社の開発したTurbo-CとTurbo-C++で使われている関数で
他の会社が開発したCやC++のコンパイラではコンパイルできません。

そもそもご提示のプログラムはどういう目的で開発しているのでしょうか。
学校の課題ですと、それなりの環境を学校側で用意してくれていると
思うのですが。独学でしたら、どこからあの関数を使う知識を得たの
でしょうか。また、「MicroSoftのCでグラフィックを書きたいんですけど」
と言っていますが、「MicroSoftのC」とはMS-Cのことでしょうか。
お使いのコンパイラも含めお教えください。

No.1977

Re:グラフィックについて教えてください!
投稿者---kokko(2002/07/05 22:29:48)


ご返答ありがとうございます。

>そもそもご提示のプログラムはどういう目的で開発しているのでしょうか。
独学です。

>独学でしたら、どこからあの関数を使う知識を得たのでしょうか。

「学生のためのC」という参考書兼問題集の問題です。

>お使いのコンパイラも含めお教えください。
私が使っているのはMicrosoft Visual C++ 6.0です。

では、グラフを書くにはどう書けばよいのでしょうか。
また、良い参考書があればお教えください。
よろしくお願いします。



No.1978

Re:グラフィックについて教えてください!
投稿者--- 2児のオヤジ です。(2002/07/06 08:42:33)


>>では、グラフを書くにはどう書けばよいのでしょうか。
>また、良い参考書があればお教えください。

ドローツールの基礎でしたら、
TRY!PC http://www.cqpub.co.jp/try/

の 2001年冬号 がわかりやすいと思うのですが?!
ちょっと違うかもしれませんが、わかりやすいです。

No.1979

Re:グラフィックについて教えてください!
投稿者--- 2児のオヤジ です。(2002/07/06 09:19:28)


追記
上記の本は Microsoft Visual C++ 6.0を使った C++です。

>graph.hがインクルードされませんでした
あるか?どうか?確認されたらどうですか。(検索etc)
Visual C++ 6.0にはないと思うのですが。

PC 私も初心者ですので、参考程度にして下さい!!

No.2016

Re:グラフィックについて教えてください!
投稿者---kokko(2002/07/09 09:25:32)


お返事ありがとうございました。
遅くなってごめんなさい。

>ドローツールの基礎でしたら、
>TRY!PC http://www.cqpub.co.jp/try/

ページに行ってみました。
そこで紹介されていた本を見に行こうと思います!
参考にしてみます。
ありがとうございました!


No.1982

Re:グラフィックについて教えてください!
投稿者---ともじ(2002/07/06 17:55:10)


こんにちは。

>独学です。

そうですか。何かと大変だとは思いますが、頑張ってください。

>私が使っているのはMicrosoft Visual C++ 6.0です。
>では、グラフを書くにはどう書けばよいのでしょうか。

VC++の関数を使えば可能ですが、いきなりVC++から学習すべきか
C及びC++の基礎を学んでからVC++に取り掛かるべきか、見解の
分かれるところではあります。
以前、このような書き込みをしましたので、見てみてください。
http://f1.aaa.livedoor.jp/~pointc/log222.html

>また、良い参考書があればお教えください。

こちらも目的とするものが何かにより異なりますね。
Cの基礎に関する書籍でしたらこちらにまとめてありますので
ご参考になさってください。
http://www9.plala.or.jp/sgwr-t/c_sub/books.html



No.1986

Re:グラフィックについて教えてください!
投稿者---差猫(2002/07/06 20:28:24)


>>独学でしたら、どこからあの関数を使う知識を得たのでしょうか。
>
>「学生のためのC」という参考書兼問題集の問題です。

回答者のみなさんのおっしゃっている通りgraphics.hが一部の環境にしか存在しないヘッダなのであれば、一部の環境にしか存在しないことが本のどこかに書かれているはずだと思います。
(もし書いてなければその本はC言語の解説書としては問題ありです)
でも、普通のC言語解説書だったら一部の環境にしか存在しないようなヘッダを扱わないと思うのですが……?

>では、グラフを書くにはどう書けばよいのでしょうか。

C言語で行わなければならないのか他の言語でもいいのかによって答えが変わってきます。

C言語でなければならないのなら、
とりあえずダミーのgraphics.hを用意すればコンパイルは通りますが
もちろん意図したとおりには実行されません。

C言語でなくてもよいのなら、
Visual C++に描画機能が用意されています。
しかし、これを使いこなそうと思ったら大変です。
とてつもなく難しいのです。
単にWindowsでグラフを書くアプリケーションを作るのなら
Visual Basicのほうがはるかにわかりやすいです。
(処理効率はVBよりもVCのほうがいいようですが)