mieki256's diary



2024/01/22(月) [n年前の日記]

#1 [basic] FreeBASICで画像描画

Windows10 x64 22H2 + FreeBASIC 1.10.1 で、FreeBASIC について勉強中。

まずは画像を表示できないことにはそれらしいプログラムも書けないだろうと思えたので、画像ファイルの読み込みと描画について少し実験。

インストールの仕方は以下を参考に。

_FreeBASICを再勉強中 - mieki256's diary

bmp画像の読み込みと描画 :

FreeBASICは標準状態で、bmp画像の読み込みに対応しているらしい。ひとまずサンプル(examples/manual/gfx/bload2.bas)を参考にして動作確認してみた。

_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画像だけど、今回はこんな感じの画像を読み込んで描画しようとしている。

image_png.png


fbc bload.bas と打てば bload.exe を生成することができる。実行すると以下のようなウインドウが表示される。bmp画像を読み込んで描画することができている。

bload_ss.png


注意点。FreeBASIC は、画像の中の、RGB=(255,0,255) を ―― 要はピンク? 紫? を透明色にして描画することができるらしい。実際、上記の動作結果でも、四隅が透明色扱いになって描画されている。

png画像の読み込みと描画 :

FBImageというライブラリを利用すれば、FreeBASIC でpng、jpg、tga を読み込むこともできる。ライブラリの入手先は以下。

_FBImage static Win/Lin 32/64-bit - freebasic.net

FBImage.zip を入手して解凍。
  • .bi ファイルは FreeBASICインストールフォルダ/inc にコピー。
  • .a ファイルは FreeBASICインストールフォルダ/lib/win??/ 以下にコピー。
これで FBImage をインストールできる。

サンプルソースは以下。

_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() で画像を読み込める。
それ以外は、bmp画像の読み込みと似た感じで処理できる。

fbc fbimage.bas と打てば fbimage.exe を生成できる。実行すると以下のようなウインドウになった。png画像を読み込んで描画することができている。

fbimage_ss.png

フルスクリーン表示 :

せっかくだからフルスクリーン表示っぽいことができるかどうか試してみる。

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 日分です。

過去ログ表示

Prev - 2024/01 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project