チカラの技術

電子工作やプログラミング

BMPファイルをマイコンで使いやすい形式に変換するソフト

こんにちわ。
BMPファイルをマイコン用の画像形式に変換するソフトを作りました。

イメージ 3
先頭からデータを読み込んでそのまま表示できる無圧縮データを生成します。



○ダウンロード


実行ファイルのダウンロード


プロジェクトのダウンロード


○機能


このソフトはマイコンでの画像表示を支援する為のソフトでBMPファイルから変換します。
BMPファイルのフォーマットはこちらのページで詳しく解説されています。

主な機能は以下の3つです。
1.ピクセル配置を「下から上へ」→「上から下へ」に並び替えます。
例えばこのようなBMPファイルが有った場合、
イメージ 2
BMPフォーマットは下から上にピクセルが並んでいるのでマイコンで先頭から
画像を読み出すと下のようになってしまいます。

イメージ 1
このソフトはBMPファイルのpixlel配列を並び替えて先頭から画像を読める形式に変換にします。
(画像はcatman)

2.ヘッダファイルを削除します。(非有効化を選択できます。)

3.カラーbitを減色します。



○使い方


1.セレクタから出力したいカラー形式を選択してください。
ヘッダーを残したい場合は右隣のボックスをチェックしてください。
連番BMPの場合は先頭ファイルのヘッダーのみ残します。

2.変換対象のBMPファイルを含むフォルダを選択してください。
入力BMPのファイル名に5桁の連番を設定した場合、00001番から順に変換,結合されます。
00001の無い連番や途中で番号が抜けていた場合、欠番以後は単体のファイルとして処理されます。

選択後、出力ファイルの情報が表示されます。
「Serial file」に動画ファイルが含むBMPファイル数、画像サイズが表示されます。
「Unit files」に単体のファイルの数が表示されます。

3.出力ファイルを保存するフォルダを選択してください。


4.「Start to convert files」をクリックすると変換が開始されます。

5.終了後メッセージが表示され、ファイルが出力されます。
出力後のファイルは「xxxx_yy.bin」
xxxxxにはファイル名,yyには出力後のbit数を表します。

○入力と出力の関係
入力ファイルは8bit,16bit,24bitに対応しています。
ただし、BMP8bitはカラーパレットなので出力もカラーパレットのみ対応しています。
データは入力,出力共にリトルエンディアンです。

『24bit→RGB565』
入力ファイルが24bitBMのとき、ビット配列はMSBから
[R7 R6 R5 R4 R3 R2 R1 R0,G7 G6 G5 G4 G3 G2 G1 G0,B7 B6 B5 B4 B3 B2 B1 B0]
(R:RED, G:GREEN, B:BLUE)
です。

出力ファイル16bitは入力ファイルから
[R7 R6 R5 R4 R3 G7 G6 G5 , G4 G3 G2 B7 B6 B5 B4 B3]
にbit移動,減色されます。

『16bit→RGB555』
16bitBMPファイルはRGB555であるので入出力共に
 [ x R4 R3 R2 R1 R0 G4 G3,G2 G1 G0 B4 B3 B2 B1 B0]
となります。
よって色情報を多く取得したい場合は24bitカラーから16bitへ変換する事をお勧めします。


○画像生成に役立つお勧めのフリーソフト


○Super Bara-Baby X
http://www.vector.co.jp/soft/win95/art/se481023.html
動画からfpsを指定して画像を抽出してくれます。
このソフトで出力したBMPファイルの連番はそのまま私のソフトの動画出力機能へ入力できます。

○縮小マシン easypiccnv

http://www.vector.co.jp/soft/winnt/art/se486873.html
アスペクト比を保ったまま画像を縮小し、余白は設定した背景色で埋めてくれます。
ドラッグ&ドロップで複数ファイルの縮小が可能です。

○リネーム君
http://www.vector.co.jp/soft/win95/util/se093487.html
複数のファイル名を連番で変更してくれます。
Super Bara-Baby Xで抜き出した動画の一部分を切り出して変換したい時に便利。


○その他

○対応していない形式

1. 1bit,2bit,4bit, 32bit のBMPカラーには現在、対応していません。

2.  パディングを含むBMPは対応していません。
バイトパディングとはBMPの1行に含まれるデータが4バイトにアライメントしていない場合に詰め込まれるデータを指します。
入力カラーのバイト数(24bitなら3バイト)× 一行のピクセル数 ÷ 4 で余りが出た場合、そのBMPはパディングを含んでいます。
 一般的なLCDモジュールのpixel幅である320, 400, 480, 680 はパディングを含まないので使用できます。


その他の情報はreadmeを参照してください。
質問等有ればコメントでお気軽にどうぞ。