A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
★アドバイス
・『DLL』の場合はビットマップデータのみのリソースを単純に DLL 化しているだけ。
・『DAT』の場合は多分、独自にビットマップデータをアーカイブ(まとめる)しているのでは。
『DAT』はソフトによって『データ』ならその拡張子をつけますので独自に1つに
まとめているだけだと思います。
・イメージ的には
総ヘッダ情報(ビットマップデータの個数など)
サブヘッダ情報(ファイル名、ファイルサイズなど)、1つ目のビットマップデータ
サブヘッダ情報(ファイル名、ファイルサイズなど)、2つ目のビットマップデータ
サブヘッダ情報(ファイル名、ファイルサイズなど)、3つ目のビットマップデータ
:
サブヘッダ情報(ファイル名、ファイルサイズなど)、n個目のビットマップデータ
とこんな感じで1つのデータファイルに出来ます。
・DLL 化すればリソースを読み込む関数群(LoadBitmp、LoadImage)などで簡単に利用できます。
独自のデータファイルでパックした場合は、
(1)総ヘッダ情報より、ビットマップデータの個数などを取得
(2)サブヘッダ情報より、ビットマップデータのファイル名を頼りに Bitmap 形式を読み込む
(3)指定のファイル名が見つからないとき、NULL を返す。
※こんな感じの独自関数群を用意します。
作り方:
typedef struct bmpdata_t {
char filename[ MAX_PATH ]; ←bmpファイル名
long size; ←bmpのサイズか、ファイルサイズなど
long x; ←bmpの横幅
long y; ←bmpの高さ
} bmpdata_t;
bmpdata_t bmp;
long lCount = 10; ←10個
fwrite( &lCount, sizeof(long), 1, fp ); ←総ヘッダ情報の出力
strcpy( bmp.filename, "Sample1.bmp" );
bmp.size = ファイルサイズなど;
bmp.x = xxxx;
bmp.y = yyyy;
fwrite( &bmp, sizeof(bmpdata_t), 1, fp ); ←サブヘッダ情報の出力(No.1)
MyFileCopy( bmp.filename, fp );
strcpy( bmp.filename, "Sample2.bmp" );
bmp.size = ファイルサイズなど;
bmp.x = xxxx;
bmp.y = yyyy;
fwrite( &bmp, sizeof(bmpdata_t), 1, fp ); ←サブヘッダ情報の出力(No.2)
MyFileCopy( bmp.filename, fp );
:
strcpy( bmp.filename, "Sample10.bmp" );
bmp.size = ファイルサイズなど;
bmp.x = xxxx;
bmp.y = yyyy;
fwrite( &bmp, sizeof(bmpdata_t), 1, fp ); ←サブヘッダ情報の出力(No.10)
MyFileCopy( bmp.filename, fp );
その他:
・上記の簡単なプログラムで複数のビットマップデータ(ファイル)を1つにパックできると思います。
bmpdata_t 構造体を独自に定義しておきます。
今回は説明の都合上、ファイル名、サイズ、横幅、高さの4つをサブヘッダ情報としています。
必要ならば他の要素を増やしたりして下さい。
・あと MyFileCopy() 関数は指定のファイル名を fp のファイルに単純にコピーする自作関数です。
ファイル名を fopen して単純に fgetc → fputc などでコピーすればよい。あるいは fread、fwrite で。
・読み込むときは最初にサブヘッダ情報の数を long 型で取得します。
その後、サブヘッダ情報の bmpdata_t 構造体を読み込み、ファイル名、サイズから1つずつ
Bitmap 形式のファイルを読み込んでいく。読み込む関数は当然、独自に作成することとなる。
・以上。おわり。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メールをPDF化する際に、ヘッダ...
-
ftpでのネットワークバイトオー...
-
VBAでExcelのヘッダーに文字列+...
-
IrDA準拠のTX/RXヘッダとは
-
SpreadDesignerの列ヘッダ
-
cookie が有効がどうか判断させ...
-
週2回のペースって だいたい何...
-
月の第一週とは
-
アンケートなどの1日1回の投...
-
毎○曜日って、使いますか?
-
エクセルで相対パスの書き方を...
-
BASE64でエンコードしてPOSTし...
-
平日朝の国道246線混雑状況につ...
-
CGIの中にinclude
-
毎週同じ曜日にラブホに行くと...
-
携帯用のページに perl で post
-
エクセルで毎月第2週日の水曜日...
-
Quantifier follows nothing in...
-
よくある 『 第○(1・2・3・4・...
-
Consolidateメソッドの引数のSo...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
リストコントロールの列幅を固...
-
VBAでExcelのヘッダーに文字列+...
-
perlでHTTP Request Headersの...
-
AccessVBAで「このフィールドに...
-
[C#]ListView一覧表示時の幅設...
-
SpreadDesignerの列ヘッダ
-
TCPヘッダのチェックサム算出方法
-
ftpでのネットワークバイトオー...
-
ヘッダのinclude順
-
perl5について
-
Content-type: text/htmlが表示...
-
関数ヘッダ?
-
Thunderbirdのフィルタについて
-
HTTP 200 OKの後のリダイレクト?
-
ルータでのMTU、MSS設定値の検...
-
HTTPヘッダの大きさ
-
タイトルが・・・
-
掲示板のcookieが消える?
-
基本認証の内部に自動でログイ...
-
file_get_contents でリダイレ...
おすすめ情報