CreateGraphFromMem

メモリ上の画像ファイルイメージからグラフィックハンドルを作成する

val = CreateGraphFromMem(RGBFileImage, RGBFileImageSize)

MemImage : 画像ファイルの内容が丸々存在するメモリ上のアドレス
MemImageSize : 画像ファイルのサイズ

(プラグイン / モジュール : DxLibW)

解説

グラフィックハンドルの作成は主に LoadGraph などで行いますが、
これらの関数ではDXライブラリが読み込みに対応したグラフィック形式(BMP,PNG,JPEG,ARGB,TGA,DDS)で保存されたファイルが誰でもアクセス出来るディスク(
又はそれ以外の補助記憶装置 )上に存在していなければなりません。

DXライブラリが対応しているグラフィック形式は決して特別なものではないので、
グラフィックが保存されているディスクにアクセスすれば誰でもソフトで使われている画像を閲覧する事が出来てしまいます。
ゲーム中では苦労しないと見れない画像も同じように簡単に見れてしまうので、
普通に考えてもこの状況はあまり好ましくありません。

と、いうところで思いつくのがファイルの暗号化です。

例えば、画像ファイルのデータ全てにNOT演算( ~ )を掛けておけば、
NOT演算されたデータを元に戻さない限り誰も画像ファイルの中身を覗く事は出来ません。

しかし、そのままではDXライブラリでも読み込むことが出来ませんので、
読み込む前にデータを元に戻す必要があります。

その手順は、ファイルをまずメモリ上に読み込み、元のデータに戻す処理を施した後・・・・後、
どうすればいいのでしょうか?

LoadGraph で読み込むにはファイルとしてディスク上に存在していなければなりませんので、
例えば一時的に元に戻したデータをファイルに保存して、
LoadGraph でグラフィックハンドルを作成した直後に削除する・・・確かにこの方法であれば実現可能です。

・・・ですが、あんまり良い方法とはとても思えません。さてどうしましょう。

という時に役に立つのがこの CreateGraphFromMem という関数です。

この関数は、DXライブラリが読み込むことが出来るグラフィックファイル(
BMP,PNG,JPEG,ARGB,TGA,DDS )のデータを、
ファイルからではなくメモリ上から読み込んでグラフィックハンドルを作成出来ます。

第一引数の MemImage にはグラフィックファイルのデータが丸々存在するメモリ領域の先頭アドレスを、
第二引数の MemImageSize にはメモリ上に存在するグラフィックファイルデータのサイズをバイト単位で渡します。

用途は主に先ほどの例の通り、閲覧可能なファイル形式のままディスクに画像データを保存しておきたくない時等に使用します。

尚、CreateGraphFromMem 関数に渡したグラフィックファイルデータはグラフィックハンドルが作成し終わった後は必要ありませんので、
データを格納していたメモリ領域を malloc や new で確保していた場合は解放してしまっても大丈夫です。

<<注意>>

この関数で作成れたグラフィックハンドルはフルスクリーン画面からタスク切り替え等で一時的にデスクトップ画面に戻った場合、
再度フルスクリーン画面になった時に画像は自動的に復元されません。

この場合 SetRestoreGraphCallback 関数で登録できる画像復元関数で画像を再度読み込む必要があります。 -->
※ DxLib のハンドル値は 32bit/64bit 共に int 型です。

戻り値:
  -1:エラー発生
  0以上:新しいグラフィックハンドル

情報

プラグイン / モジュールDxLibW
バージョン3.24f
作成日2026/04/12
著作者DxLib: Takumi Yamada / HSP binding: IronHSP Project
URLhttps://dxlib.xsrv.jp/
備考hspdxlib.as をインクルードして使用
タイプDxLib ゲームライブラリ
グループDxLib 画像管理
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\hspdxlib.hs