FreeBASIC 描画ライブラリについての質問:
FreeBASIC 描画ライブラリについての質問
Gfxlib へのリンク方法や使い方は?
Gfxlib は、言語に「内蔵」されています。そのため、.bi ファイルを含めたり、ライブラリに明示的にリンクしたりする必要はありません。
FreeBASICは、
Screen (Graphics) か
Screenres 命令文を見つけると、Gfxlib を使うことを検出します。
このため、Gfxlib を使うには、描画画面モードを開始し、描画命令を使うだけです。
このページの最初に戻る
fbgfx.bi ヘッダー・ファイルとは?
このページの最初に戻る
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 が呼び出されるときに発生する可能性があります。
このような場合は、画面の初期化も構築子に移動し、画像作成構築子の前に実行させる必要があります。
このページの最初に戻る
参照: