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

FreeBASIC Imagecreate

目次→描画ライブラリ参考→2次元 描画関数IMAGECREATE←オリジナル・サイト

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

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

画像のために、記憶装置を、割り当てて、初期化します。


構文:
declare function ImageCreate ( byval width as long, byval height as long, byval color as ulong = transparent_color ) as any ptr
declare function ImageCreate ( byval width as long, byval height as long, byval color as ulong = transparent_color, byval depth as long ) as any ptr

用法:
result = ImageCreate ( width, height [, [ color ][, depth ]] )

パラメタ:
width
必要な幅で、ピクセル数で指定。
height
必要な高さで、ピクセル数で指定。
color
画像の領域を満たすピクセル値。
depth
必要な色の濃さで、1画素あたりのビットで指定。

戻り値:
画像を作れないと、NULL (0) が返されます。作れたら、画像のアドレスが返されます。
ImageCreate は、描画モード初期化後に呼ばれなければなりません。そうでないと、0 を返します。

従って、Shared 変数宣言の場合、ImageCreate を、統合初期化子として使うことができません。UDT(メンバー項目やコンストラクタで)内でさえです。初期化値(共有変数の)は、ユーザ・コードが動く前に、プログラムの開始時に設定されるからです。
画像アロケーションは、切り離された実行可能ファイル指示において呼び出され、そして、描画モード初期化後に呼び出されなければなりません。

説明:
どちらの手続きも、指定された widthheight の画像のために、メモリを割り当てます。
成功しなければ、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 ファイルとプログラムを、丸ごとダウンロードできます。

'//------------------------------------//
'///// みちょだージャンプ ///////////////
'////////////// Created by みっちょ /////
'//------------------------------------//

' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

'////////// じゅんび ////////////////////
Screen 18
Dim MYX As Integer, MYY As Integer
Dim IMGMY As Any Ptr, IMGKS As Any Ptr
Dim I As String, JX As Integer
MYX=288:MYY=384              '顔の位置の初期座標

'////////// 絵を読みこむ ////////////////
IMGMY = ImageCreate(64,64)   '画像のために、記憶装置を、割り当てて、初期化します。
BLoad "michyoder.bmp",IMGMY  '顔
IMGKS = ImageCreate(640,32)  '画像のために、記憶装置を、割り当てて、初期化します。
BLoad "kusa.bmp",IMGKS       '草

'////////// メイン //////////////////////
MAIN:
Cls
Put (0,448),IMGKS       '草
Put (MYX,MYY),IMGMY     '顔
If JX=1 Then MYY=MYY-15
If MYY<100 Then JX=2    '上に行き過ぎると、 
If JX=2 Then MYY=MYY+10 '下に移動。座標はプラスする。
If MYY>384 Then         '初期位置(草の所)に戻ると
  MYY=384
  JX=0                  '移動停止。
End If

I=InKey                      'キーボード・バッファで、キー入力を待って、最初のキーの文字を返します。
If I=Chr(27) Then GoTo XEND  'ESC(エスケープ)
If I=" " Then JX=1           '上に移動。座標はマイナスする。

Sleep 100,1
GoTo MAIN

'///////// お片付け /////////////////////
XEND:
ImageDestroy(IMGMY)     '画像のための記憶装置を破棄して、割り当てを解除します。
ImageDestroy(IMGKS)

方言差:

QB との違い:

参照:

2次元描画関数に戻る

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

ページ歴史:2022-04-29 06:11:47
日本語翻訳:WATANABE Makoto、原文著作者:AntoniGual

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

表示-非営利-継承