mieki256's diary



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

#1 [nitijyou] あけましておめでとうございます

あけましておめでとうございます。本年もよろしくお願いいたします。

#2 [prog] bin2cについて

C/C++を使って、Windows用の実行形式ファイル(exeファイル)に、png画像のバイナリをそのまま含める方法について調べてた。

リソースファイルを使う方法 :

一般的には、リソースファイル(.rc)というものを用意して、実行形式ファイル内にバイナリを同梱させる場合が多そうな印象を受けた。

リソースファイル内にpng画像のファイル名やIDを書いておいて、gcc の場合は windres というツールを使うことで、リソースファイル(.rc)からオブジェクトファイル(.o)を生成。そのオブジェクトファイルをリンカに渡して実行形式を作る。

リソースファイル内のバイナリを取り出すには、FindResource()、LoadResource() 等の関数を使う。

_リソースのPNG画像を使う方法
_FAQ9-2
_バイナリリソースの追加-Windowsプログラミング実験室-
_カスタムリソース

ただ、関連情報を探しているうちに、bin2c というツールがあることを知った。

bin2cを使う方法 :

bin2ch は、バイナリファイルを読み込んで、C/C++ の unsigned char 配列の形でテキスト出力するツールらしい。考えてみれば、そういうやり方でもバイナリを含めることはできるなと…。

この bin2c というツール、標準的なツールとして存在しているわけではなさそうで。やってることが単純というか、プログラマーなら誰でも書ける処理のせいか、ツール名は同じでも、色んな人が実装して公開している模様。

_bin2c download | SourceForge.net
_gwilymk/bin2c: A very simple utility for converting a binary file to a c source file
_j.eng's site: hxtools
_What is Bin2c

中には Python で書かれたものもあった。

_delimitry/bin2c: Simple tool for creating C array from a binary file

何にせよ、bin2c を使うやり方でも、目的は果たせそうではあるなと…。

使ってみた :

SourceForge で公開されている版を入手して使ってみた。

_bin2c download | SourceForge.net
_bin2c - Browse /1.1 at SourceForge.net

bin2c-1.1.zip を入手して解凍すると、中には以下の3つのファイルが入っている。
bin2c.c
bin2c.exe
readme.txt

bin2c.exe が実行ファイル。

texture.png を渡して、texture.h を生成してみる。
bin2c.exe -o texture.h texture.png

以下のような感じの .h が得られた。
/* Generated by bin2c, do not edit manually */

/* Contents of file texture.png */
const long int texture_png_size = 103208;
const unsigned char texture_png[103208] = {
    0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48, 0x44, 0x52,
    0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, 0xF4, 0x78, 0xD4,
    0xFA, 0x00, 0x00, 0x20, 0x00, 0x49, 0x44, 0x41, 0x54, 0x78, 0xDA, 0xEC, 0xBD, 0x79, 0xBC, 0x5D,
// ...
    0x1A, 0xBE, 0xFD, 0x3F, 0x10, 0x01, 0xD1, 0x1A, 0x6F, 0xDC, 0xEF, 0xE1, 0x00, 0x00, 0x00, 0x00,
    0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82
};

「#include "texture.h"」とでも書いてやれば、このバイナリを含めることができるのではないかなと…。たぶん。まだ試してないけど。

以上、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