FreeBASIC マニュアルのトップに戻る

FreeBASIC FaqPggfxlib2

目次→FAQ→Frequently Asked FreeBASIC Graphics Library Questions←オリジナル・サイト

描画ライブラリFAQ 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る




FreeBASIC 描画ライブラリについての質問:
- Gfxlib へのリンク方法や使い方は?
- fbgfx.bi ヘッダー・ファイルとは?
- Get/Put 配列をどのように管理しますか?
- Bsave/Bload は、なぜクラッシュしますか?
- 色の、赤・緑色・青・アルファ成分を、どうしたら取得できますか?
- アプリケーションを終了する 'x' ボタンを、ウインドウに設定する方法は?
- Screen 13 か 14 を使って、全画面で、プログラムを動かすことができません!
- なぜ、Imagecreate は、NULL ポインターを返しますか?

目次に戻る




FreeBASIC 描画ライブラリについての質問

Gfxlib へのリンク方法や使い方は?
Gfxlib は、言語に「内蔵」されています。そのため、.bi ファイルを含めたり、ライブラリに明示的にリンクしたりする必要はありません。
FreeBASICは、Screen (Graphics)Screenres 命令文を見つけると、Gfxlib を使うことを検出します。
このため、Gfxlib を使うには、描画画面モードを開始し、描画命令を使うだけです。

このページの最初に戻る

fbgfx.bi ヘッダー・ファイルとは?
fbgfx.bi ヘッダーファイルを、プログラムに含めることができます。fbgfx.bi ヘッダーファイルには、プログラマが、Gfxlib を使うときに役立つ、定数と型定義が含まれています。
しかし、Gfxlib を使うために、明示的にこのファイルを含める必要はありません。
ヘッダーは、単に補助的なものです。
fbgfx.bi ヘッダーファイルは、Screen (Graphics) Screenres に渡す画像モードの旗の定数、キーボード・スキャン・コード の定義、fb.Image バッファ構造体の定義を、含んでいます。

このページの最初に戻る

Get/Put 配列はどのように管理されますか?
FreeBASIC では、画像を、配列( QB と同様)として、あるいは、ポインタとして使用できます。
いずれにしても、画像データは、連続した1つの塊に含まれています。
塊は、ヘッダーと、それに続く画像データから構成されます。
ヘッダーには、2つの形式(古い形式と、新しい形式)が有り、これに従う画像データの形式を決定します。
詳細は、内部の描画形式 を参照下さい。

このページの最初に戻る

Bsave/Bload は、なぜクラッシュしますか?
Bsave/Bload は、FreeBASICに、描画画面を読み込むためと、保存するためだけに、使用できます。
これは、テキストモード画面を保存するためは、使えません。

配列を、読み込んだり保存したりする方法は、BLOAD/BSAVE テキスト・モードを使う をチェックしてください。

このページの最初に戻る

色の、赤・緑色・青・アルファ成分を、どうしたら取得できますか?

色属性の各バイトは、それぞれ、赤・緑・青・アルファ成分に、対応しています。
以下の例は、16、24、32ビットの色属性から、成分値を抽出する方法を示しています。

#define rgb_a(x) ((x) Shr 24)
#define rgb_r(x) ((x) Shr 16 And 255)
#define rgb_g(x) ((x) Shr 8 And 255)
#define rgb_b(x) ((x) And 255)

Dim As UInteger c
Dim As Integer x, y
Dim As UByte red, green, blue, Alpha

'' 16ビットか24ビットか32ビットの画面モードが設定されていると仮定します
c = Point(x, y)
red = rgb_r(c)
green = rgb_g(c)
blue = rgb_b(c)
Alpha = rgb_a(c)


このページの最初に戻る

アプリケーションを終了する 'x' ボタンを、ウインドウに設定する方法は?
ウインドウに表示された描画モードに、Inkey で、ウインドウの X(閉じる)ボタンを押すテストをすることができます。
値 Chr(255)+ "k" (これは、Alt+F4 で返されるコードと同じ)をチェックします。
これは、Win32 とリナックスで使えます。DOSでは、「X」ボタンは、ありません。

下は、一つの例です:

'' "X" 閉じるボタンの例。Win32 とリナックス専用
Dim As String key
Screen 13
Do
  Print "Click the 'x' to close this app."
  Sleep
  key = Inkey
Loop Until key = Chr(27) Or key = Chr(255, 107) 'escape or x-button
 

このページの最初に戻る

Screen 13 か 14 を使って、全画面で、プログラムを動かすことができません!
これは、ハードウェア/ドライバーの制限(Win32 と Linux のみ?)です。
今日のビデオカードは、これらの低解像度描画モードを実行しません。
全画面が必要なら、少なくとも Screen 17 か 18 を使うように、書き直して下さい。640×480 以上の今日のハードウェアは、これをれを扱うことができます。

このページの最初に戻る

なぜ、Imagecreate は、NULL ポインターを返しますか?
Imagecreate は、現在の画面のピクセル・フォーマットに合う、画像バッファを作成する必要があります。そして、まだ、画面モード設定がないなら、画像バッファを作成することができないので、それは NULL を返します。そして、後ほど、プログラムを粉砕する NULL ポインター・アクセスに終わります。

これは、描画ライブラリが、Screen(Graphics)Screenres の呼び出しで初期化される前に Imagecreate が呼ばれるときに、発生することが知られています。
そして、これはプログラムの主要部で Screen か Screenres を呼び込む前に、グローバル構築子で Imagecreate が呼び出されるときに発生する可能性があります。
このような場合は、画面の初期化も構築子に移動し、画像作成構築子の前に実行させる必要があります。

このページの最初に戻る

参照:

目次に戻る

←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2023-07-09 01:04:39
日本語翻訳:WATANABE Makoto、原文著作者:ChaOs

ホームページのトップに戻る

表示-非営利-継承