画像データを実行ファイルに同梱する

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ねおめろ

画像データを実行ファイルに同梱する

#1

投稿記事 by ねおめろ » 17年前

画像データを実行ファイルに同梱したいのですが、どうやればいいんですか?
実行ファイル単体で実行できるようにしたいのです。

環境:VC++ 2008 ExpressEdition,Dxlib

array

Re:画像データを実行ファイルに同梱する

#2

投稿記事 by array » 17年前

不可能じゃないと思いますが、無理があると思います。

色々なフリーゲームを見てみても、アーカイブで圧縮して、簡単には中身を見れなくする程度みたいです。

実行ファイルに同梱するとなると、画像を独自で変換したデータを組み込んで、読み込める様に・・・とかするんじゃないでしょうか。

多分、独学で勉強しないと無理だと思うので、そういった事を考慮すると、アーカイブで圧縮して、実行ファイルと一緒に同梱する。といった方が妥当だと思います。

ねおめろ

Re:画像データを実行ファイルに同梱する

#3

投稿記事 by ねおめろ » 17年前

わかりました。ありがとうございました。

Justy

Re:画像データを実行ファイルに同梱する

#4

投稿記事 by Justy » 17年前

 もう解決してしまったようなので、軽く紹介だけ。


>画像データを実行ファイルに同梱したいのですが、どうやればいいんですか

 2通りのやり方でできます。

 1つ目の方法は同梱したいデータを C/C++の配列に変換してしまうことです。
[color=#d0d0ff" face="sans-serif]static const unsigned char data[/url] = 
{
    0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
    0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52,
    0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80,
    0x08, 0x03, 0x00, 0x00, 0x00, 0xf4, 0xe0, 0x91,
    0xf9, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59,
    ....(略)....
}[/color]
 これは某 pngデータの先頭部分ですが、このように配列化してしまえば
C/C++のソースの中に埋め込めます。


 2つ目の方法はリソースとして埋め込む方法です。
 リソースとしてデータを埋め込み、WinAPIの FindResource() / LoadResource() / LockResource()などを
使ってデータを取り出します。

ttp://wisdom.sakura.ne.jp/system/winapi/win32/win72.html
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win75.html


 ま、どっちにしても面倒ですね。

※ 実際にはまだ他にも方法がないわけではないですが、その方法は輪をかけて面倒で・・・。

GPGA

Re:画像データを実行ファイルに同梱する

#5

投稿記事 by GPGA » 17年前

さっきFindResourceについていろいろ調べていたんですけど、
これ、解放する関数がないようです。

プロセスが削除されるときに、消えるらしいんですけど
任意で解放する関数がなくて、困りました。

>※ 実際にはまだ他にも方法がないわけではないですが、その方法は輪をかけて面倒で・・・。
exeファイルを作成した後に、リソースをexeの後ろにくっつけて
アプリ起動時にそこから読み取るとか、そんな感じですかね?

バグ

Re:画像データを実行ファイルに同梱する

#6

投稿記事 by バグ » 17年前

.NETやMFCだったら、簡単なんですけどね…(^_^;)

Justy

Re:画像データを実行ファイルに同梱する

#7

投稿記事 by Justy » 17年前


>さっきFindResourceについていろいろ調べていたんですけど、
>これ、解放する関数がないようです。

 昔は FreeResource() / UnlockResource()ってのがあったんですけどね。
 16bitの頃は要求されるまでメモリに読み込まれることが無かったので、
明示的な解放が必要だったのですが、今はリソースは常駐してるので
LoadResource()はメモリを検索するだけになっている、みたいです。



>exeファイルを作成した後に、リソースをexeの後ろにくっつけて
>アプリ起動時にそこから読み取るとか、そんな感じですかね?

 それもありますね。
 考えていたのはインストーラ的なもので、
実行ファイルの中に別の実行ファイルとデータを入れて、
最初の実行ファイルは展開と内部の実行ファイルを実行する、
というやつでした。

 ちょっと反則ですかね(w

閉鎖

“C言語何でも質問掲示板” へ戻る