result = ImageCreate
( width, height [, [ color ][, depth ]] )
パラメタ:
width
必要な幅で、ピクセル数で指定。
height
必要な高さで、ピクセル数で指定。
color
画像の領域を満たすピクセル値。
depth
必要な色の濃さで、1画素あたりのビットで指定。
戻り値:
画像を作れないと、NULL (0) が返されます。作れたら、画像のアドレスが返されます。
ImageCreate は、描画モード初期化後に呼ばれなければなりません。そうでないと、0 を返します。
従って、
Shared 変数宣言の場合、
ImageCreate を、統合初期化子として使うことができません。
UDT(メンバー項目やコンストラクタで)内でさえです。初期化値(共有変数の)は、ユーザ・コードが動く前に、プログラムの開始時に設定されるからです。
画像アロケーションは、切り離された実行可能ファイル指示において呼び出され、そして、描画モード初期化後に呼び出されなければなりません。
説明:
どちらの手続きも、指定された
width と
height の画像のために、メモリを割り当てます。
成功しなければ、NULL (
0) が返されます。
うまく行けば、そのサイズの画像が作成され、ピクセルの領域全体を値
color で塗りつぶすことによって初期化されます。
color が指定されていないと、
color は現在の描画画面の透過色の値を想定します。これは、
ScreenControl を呼び出すことによって見つけることができます。
いずれの場合も、画像のアドレスが返されます。これはユーザーが制御するもので
ImageDestroy を使って破棄する必要があります。
最初の手続きは、現在の描画画面の色の濃さに合わせながら、その色の濃さで画像を作成します。現在の描画画面は、
SCREENCONTROL を呼び出すことによって見つけることができます。
2番目の手続きは、1画素あたりのビットで、
depthの色の濃さで、画像を作成します。
どちらの手続きでも、画像の色の濃さが描画画面のものに合っている限り、どんな画面モードでも(そして、モード変更しても)、結果の画像は、描画手続きを使用できます。
ImageCreate は、新しい画像にメモリを割り当てる場合に、推奨される方法です。
記録しようとする、メモリ・レイアウト --サイズ、構造など-- は、バージョンによって、異なっています。サイズの手計算では、(error-prone)エラーを起こしやすくなります。
しかし、特に、既存の画像のサイズを、バイトで検索するのに
ImageInfo を使用できます。これは、メモリを、画像のコピーのために手動で割り当てるか、ファイルか装置に、読み込んだり、書き出すときに使えます。
Get (描画) は、あらかじめ割り当てられたメモリを使って、画像を初期化するのに、使用できます。
例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
'' 描画画面を作成します。
ScreenRes 320,
200,
32
'' 薄暗い緑色の背景で、64×64画素の画像を作成します。
Dim image
As Any Ptr =
ImageCreate
( 64,
64,
RGB(0,
128,
0) )
If image =
0 Then
Print "Failed to create image."
Sleep
End -
1
End If
'' 画像の中心に半透明の、赤い円を描きます。
Circle image,
(32,
32),
28,
RGBA(255,
0,
0,
128),,,
1.
0, f
'' 様々なビットマップ転送方法を使用して、画像を画面に描きます。
Put (120,
60), image,
PSet
Put (140,
80), image,
Alpha
'' 画像を消します。
ImageDestroy image
Sleep
次の例は、Michyo (Nobuaki Tagami) さんが、
みちょプロゼミ FreeBASIC初級 第2回
https://lgbtiqa.com/?p=4331
で公開されているもので、BMP 画像をキーボードで操作する、シンプルで面白いコードです。
上の URL で、「みちょだージャンプの配布ファイル」として、画像 BMP ファイルとプログラムを、丸ごとダウンロードできます。
方言差:
-
別名 __Imagecreate で参考されないかぎり、-lang qb 方言では、利用できません。
QB との違い:
参照: