開発じたばた日誌

前へ●●● 次へ
じたばた日誌目次へ戻る
TSUCHY Softへ戻る


ちょっと見る アイコン抽出編


 ちょっと見るの目玉はアイコン抽出です。 これはEXE,DLLからアイコンを抽出し、ICOファイルにする機能です。

 これはかなりエキサイティングな仕事でした。 私は他のこの手のツールがどういうやり方をしているか全く知らないので、自分なりの方法を考えなくてはいけません。

 まずアイコンファイルのフォーマットから理解しないとだめです。都合のいいAPIなんてないはずです。 幸いファイルフォーマットの資料は簡単に得られました。 アイコンはビットマップと違って透明という機能かあります。 そのためにファイルの中にはマスクビットなるものがあります。これがちょっとややこしいですね。

 さて今の私にできることと言えば、アイコンを表示することだけです。 どうやってアイコンファイルをつくればいいのでしょう? 一言で言えば表示しているものから、ファイルフォーマットに従ってファイルを作ればいいのです。

 ヘッダの部分は割と固定値が多いので簡単です。 アイコンにはパレットというものがあって、当時私は理解していませんでした。 でもなぜかそれなりのものを作れたのです。フシギー。

 私のやり方は結構原始的です。いったん裏でアイコンを表示しておいて32x32ドットの色を1ドットずつ読んでいきます。 その色をアイコンファイルとして格納すればいいのです。

 ここで困ったことがありました。ファイルに納めるデータの構造体にはBYTE型が使われていたのです。 VBにはBYTE型がありません(今のVBはどうだか知りません)。 しかたがないので16ビットデータの上位と下位にうまく書き込んでBYTE型の構造体のふりをさせました。

 あとからわかったことなのですが、VBでBYTE型のデータを宣言するときは
STRING *1 (たしかこんな感じ)
で宣言すればいいのです。 しかし最も基本的なデータ型をこんなトリッキーな方法でしか宣言できないなんて情けないなぁ。

 こんなことは小さい問題でした。透明はどうするのでしょう? 私の方法では、元々の背景色を白にしてしまえば、本当は透明なところが白として認識されてしまいます。 ぐわぁぁぁ、ここまできて挫折か?