AllocDIBの仕様
同じく超俺メモ。
NScripterがDLLに対して開放している関数の中に、AllocDIBなるものがある。
これを使えば、DLLの中で、スプライト等を介さずに直接nsaファイルの中の画像を引っ張り出せる。
なお、事前にNScripter側でaddnsadirを実行していれば、DLLの中からの探索でもそれは有効である。
※これを使って、nsaファイルの中のファイルを好きなファイル名で外部に出力するDLLが組めるなあ、と言うところで寝る。
void nsa2out(char *from_filename, char *to_filename){ DIBDATA dib; /* ファイルの取得 */ AllocDIB(&dib, from_filename); /* ヘッダー作成 */ unsigned char header[54] = { 66,77,54,16,14,0,0,0,0,0,54,0,0,0, /*_BITMAPFILEHEADER_*/ 40,0,0,0,128,2,0,0,224,1,0,0,1,0,24,0,0,0,0,0, /*_BMPINFOHEADER_前半_*/ 0,16,14,0,19,11,0,0,19,11,0,0,0,0,0,0,0,0,0,0 /*_BMPINFOHEADER_後半_*/ }; /* サイズ設定 */ header[18] = dib->width % 256; header[19] = int ( dib->width / 256 ); header[22] = dib->height % 256; header[23] = int ( dib->height / 256 ); /* 出力 */ int line = dib->width * 3; while ( 0 < line % 3 ) { line ++; } FILE *fp; fp = fopen(to_filename, "wb"); fwrite(header, sizeof(header[0]), 54, fp); fwrite(dib->bits, sizeof(unsigned char), line * dib->height, fp); fclose(fp); }