2024/01/22(月) [n年前の日記]
#1 [basic] FreeBASICで画像描画
Windows10 x64 22H2 + FreeBASIC 1.10.1 で、FreeBASIC について勉強中。
まずは画像を表示できないことにはそれらしいプログラムも書けないだろうと思えたので、画像ファイルの読み込みと描画について少し実験。
インストールの仕方は以下を参考に。
_FreeBASICを再勉強中 - mieki256's diary
まずは画像を表示できないことにはそれらしいプログラムも書けないだろうと思えたので、画像ファイルの読み込みと描画について少し実験。
インストールの仕方は以下を参考に。
_FreeBASICを再勉強中 - mieki256's diary
◎ bmp画像の読み込みと描画 :
FreeBASICは標準状態で、bmp画像の読み込みに対応しているらしい。ひとまずサンプル(examples/manual/gfx/bload2.bas)を参考にして動作確認してみた。
_bload.bas
使用するbmp画像(256x256、bpp 32bit)は、以下のzipに入れておいた。
_image.zip
以下はpng画像だけど、今回はこんな感じの画像を読み込んで描画しようとしている。
fbc bload.bas と打てば bload.exe を生成することができる。実行すると以下のようなウインドウが表示される。bmp画像を読み込んで描画することができている。
注意点。FreeBASIC は、画像の中の、RGB=(255,0,255) を ―― 要はピンク? 紫? を透明色にして描画することができるらしい。実際、上記の動作結果でも、四隅が透明色扱いになって描画されている。
_bload.bas
' bload ... bmp image Load ' カレントディレクトリを exeファイルのある場所にする chdir exepath() ' ウインドウサイズと色深度を指定 screenres 512, 288, 32 ' 画像格納用の領域を確保 Dim img As any ptr = ImageCreate(256, 256) ' bmp画像読み込み bload "image.bmp", img ' 画像を描画。RGB=(255, 0, 255) のピクセルは透明色として扱う Put (16, 16), img, TRANS ' 画像を使い終わったので破棄 ImageDestroy(img) ' キー入力があるまで待つ Sleep
使用するbmp画像(256x256、bpp 32bit)は、以下のzipに入れておいた。
_image.zip
以下はpng画像だけど、今回はこんな感じの画像を読み込んで描画しようとしている。
fbc bload.bas と打てば bload.exe を生成することができる。実行すると以下のようなウインドウが表示される。bmp画像を読み込んで描画することができている。
注意点。FreeBASIC は、画像の中の、RGB=(255,0,255) を ―― 要はピンク? 紫? を透明色にして描画することができるらしい。実際、上記の動作結果でも、四隅が透明色扱いになって描画されている。
◎ png画像の読み込みと描画 :
FBImageというライブラリを利用すれば、FreeBASIC でpng、jpg、tga を読み込むこともできる。ライブラリの入手先は以下。
_FBImage static Win/Lin 32/64-bit - freebasic.net
FBImage.zip を入手して解凍。
サンプルソースは以下。
_fbimage.bas
fbc fbimage.bas と打てば fbimage.exe を生成できる。実行すると以下のようなウインドウになった。png画像を読み込んで描画することができている。
_FBImage static Win/Lin 32/64-bit - freebasic.net
FBImage.zip を入手して解凍。
- .bi ファイルは FreeBASICインストールフォルダ/inc にコピー。
- .a ファイルは FreeBASICインストールフォルダ/lib/win??/ 以下にコピー。
サンプルソースは以下。
_fbimage.bas
' load RGB png image with FBImage ' 画像読み込み用ライブラリ FBImage を使う #include once "FBImage.bi" ' カレントディレクトリを exeファイルのある場所にする chdir exepath() ' デスクトップ解像度を指定 Dim As Integer scrw = 512 Dim As Integer scrh = 288 ' ウインドウサイズと色深度(bpp)を指定 screenres scrw, scrh, 32 ' 画像読み込み var img = LoadRGBAFile("image_png.png") ' 画像を描画。RGB=(255, 0, 255) のピクセルは透明色として扱う Put (16, 16), img, TRANS ' 画像を使い終わったので破棄 ImageDestroy img ' キー入力があるまで待ち続ける sleep
- FBImage を使うには、#include once "FBImage.bi" を最初のあたりに記述する。
- LoadRGBAFile() で画像を読み込める。
fbc fbimage.bas と打てば fbimage.exe を生成できる。実行すると以下のようなウインドウになった。png画像を読み込んで描画することができている。
◎ フルスクリーン表示 :
せっかくだからフルスクリーン表示っぽいことができるかどうか試してみる。
FreeBASICは、ウインドウ表示モードの他に、フルスクリーン表示モードも指定できるようだけど、今回はウインドウ表示モードを利用して、ウインドウサイズをデスクトップ解像度と同じにした。更に、ウインドウのフレーム(境界線)を表示しないようにフラグを設定してやる。これで見た目はフルスクリーン表示のように見えるはず。
_fbimage_fullscreen.bas
fbc fbimage_fullscreen.bas と打って、fbimage_fullscreen.exe を生成して実行。フルスクリーン表示っぽい見た目になった。
FreeBASICは、ウインドウ表示モードの他に、フルスクリーン表示モードも指定できるようだけど、今回はウインドウ表示モードを利用して、ウインドウサイズをデスクトップ解像度と同じにした。更に、ウインドウのフレーム(境界線)を表示しないようにフラグを設定してやる。これで見た目はフルスクリーン表示のように見えるはず。
_fbimage_fullscreen.bas
' load RGB png image with FBImage ' full screen, window mode ' fbgfxモードを使う #Include "fbgfx.bi" Using fb ' 画像読み込み用ライブラリ FBImage を使う #include once "FBImage.bi" ' カレントディレクトリを exeファイルのある場所にする chdir exepath() ' デスクトップ解像度を取得 Dim As Integer scrw, scrh ScreenInfo(scrw, scrh) ' ウインドウサイズと色深度(bpp)を指定。ウインドウの境界線(フレーム)は無し screenres scrw, scrh, 32, , GFX_NO_FRAME ' 画像読み込み var img = LoadRGBAFile("image_png.png") ' 画面クリア color RGB(255, 255, 255), RGB(40, 80, 160) cls ' マウスカーソル非表示 SetMouse ,, 0 ' 画像を描画。RGB=(255, 0, 255) のピクセルは透明色として扱う Put ((scrw - 256) / 2, (scrh - 256) / 2), img, TRANS ' 画像を使い終わったので破棄 ImageDestroy img ' キー入力があるまで待ち続ける sleep ' マウスカーソル表示 SetMouse ,, 1
fbc fbimage_fullscreen.bas と打って、fbimage_fullscreen.exe を生成して実行。フルスクリーン表示っぽい見た目になった。
[ ツッコむ ]
#2 [anime] 「勇気爆発バーンブレイバーン」2話を視聴
録画してたソレを視聴。ロボットアニメ。
いやはや、なんというか…これは…。とにかくヤバイな…。かなりヤバイロボットアニメが始まってしまった気がする…。ヤバイ"ロボットアニメ"じゃなくて"ヤバイロボット"アニメなあたりがなんとも…。素晴らしい。
いやはや、なんというか…これは…。とにかくヤバイな…。かなりヤバイロボットアニメが始まってしまった気がする…。ヤバイ"ロボットアニメ"じゃなくて"ヤバイロボット"アニメなあたりがなんとも…。素晴らしい。
◎ ロボットに意思が有るか無いか :
元々日本の漫画に登場する巨大ロボットって意思を持っているのが当たり前だった気がするのだけど。マジンガーZあたりで乗り物としての巨大ロボットが人気を博して、そこからは乗り物的な巨大ロボットアニメが席巻しちゃったわけで。しかし、件のアニメを見ると、ロボットにも大なり小なり何かしらの意思があったほうが面白くなるよなあ、と…。メカじゃなくてキャラクターになるんだよな…。
勇者ロボシリーズのように人間に近い意志があってもいいし、レイズナーやイデオンのようにメカっぽい意思でも良い…。ロボットであれば、人間とはまた違った価値観や考え方も自然に提示することができて美味しそうな気がする。異文化衝突とでも言うか…。ロボットにとっての常識は人間にとって非常識だろうし、人間にとっての常識はロボットにとって非常識だろうし…。まあ、それは宇宙人でも妖精でも何でも当てはめて提示できるだろうけど。
それにしても、件のアニメは…。まさかこんな関係性を描ける余地が残っていたとは…。一体何を食べたらこんな発想ができるんだ…。素晴らしい。
勇者ロボシリーズのように人間に近い意志があってもいいし、レイズナーやイデオンのようにメカっぽい意思でも良い…。ロボットであれば、人間とはまた違った価値観や考え方も自然に提示することができて美味しそうな気がする。異文化衝突とでも言うか…。ロボットにとっての常識は人間にとって非常識だろうし、人間にとっての常識はロボットにとって非常識だろうし…。まあ、それは宇宙人でも妖精でも何でも当てはめて提示できるだろうけど。
それにしても、件のアニメは…。まさかこんな関係性を描ける余地が残っていたとは…。一体何を食べたらこんな発想ができるんだ…。素晴らしい。
[ ツッコむ ]
以上、1 日分です。