mieki256's diary



2024/02/13(火) [n年前の日記]

#2 [basic] FreeBASICで等幅ビットマップフォントのみを使って描画

FreeBASIC の Draw string でカスタムフォントを使ってみたけれど、フォント画像を用意するのが面倒臭いだろうなと思えてきた。これがもし、等幅フォントのみを扱うことを前提にするなら、もっと簡単にフォント画像を用意できそうだし、描画処理も簡単にできそうな気がする。試してみた。

環境は、Windows10 x64 22H2 + FreeBASIC 1.10.1 32bit。

フォント画像の用意 :

まずは、以下のような文字が並んでいる画像を、等幅フォントで作成。

 !"#$%&'()*+,-./
0123456789:;<=>?
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_
`abcdefghijklmno
pqrstuvwxyz{|}~ 


透明色=RGB(255, 0, 255) として扱う。以下のような画像になる。

font_pet2015_16x16.bmp


これなら、1文字当たりの横幅、縦幅は、(画像横幅 / 16), (画像縦幅 / 6) で求められる。

後は、与えらえた文字列の、各文字に対応する領域を Put() で描画していけばいい。

描画処理 :

そんな感じで、描画処理は以下のようになった。


画像の読み込み、テキスト描画をする部分。

_bitmapasciifont.bi


簡単な使用サンプル。

_simple_sample.bas
#include "bitmapasciifont.bi"
ScreenRes 320, 240, 32

Dim fnt As BitmapAsciiFont
fnt.load_image("font_profont_12x22.bmp")

fnt.draw_string(10, 10, "Hello World !")

sleep
fnt.destroy()


フォント画像を渡して描画するサンプル。

_test_bitmapasciifont.bas
#include "bitmapasciifont.bi"

If Command(1) = "" Then
    Print "Usage: " & Command(0) & " INPUT_FONT.bmp" : end
End If

Dim As String fontfile = Command(1)

Const SCRW = 640
Const SCRH = 480
Dim As Integer sdepth = 32

ScreenRes SCRW, SCRH, sdepth

Dim fnt As BitmapAsciiFont
fnt.load_image(fontfile)

Dim As Integer h = fnt.cheight + 1
fnt.draw_string(0, h * 0, "Load: " & fontfile)
fnt.draw_string(0, h * 1, "Hello World ! 0123456789")
fnt.draw_string(0, h * 2, "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_")
fnt.draw_string(0, h * 3, "`abcdefghijklmnopqrstuvwxyz{|}~ ")
fnt.draw_string(0, h * 4, "Push any key to exit.")

sleep
fnt.destroy()


スクリーンショットは以下。

ss_font_courr18_16x26.png

ss_font_pet2015_16x16.png

ss_font_profont_12x22.png

ss_font_shnm8x16r_8x16.png

ss_font_shnm8x16rx2_16x32.png

ss_font_ter-u24b_12x24.png


ファイル一式を置いておきます。御自由にどうぞ。

_bitmapasciifont_20240213.zip


これなら、フォント画像を作るのも簡単なのではないかな…。

フォントの入手先は以下を参照のこと。

_readme.md

以上です。

過去ログ表示

Prev - 2024/02 - 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

カテゴリで表示

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


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

Powered by hns-2.19.6, HyperNikkiSystem Project