ページへ戻る
印刷
DLL/PICTURE0
をテンプレートにして作成 ::
OSASK計画
osaskwiki
:DLL/PICTURE0 をテンプレートにして作成
開始行:
* 画像ファイル一般を扱えるデコーダDLL
-・・・をみんなで作ろうかな、というプロジェクト。
* なんでDLLにするの?
-ええとOSASKの予定では、この手の機能はいずれAPIとして実装...
* どんなDLLにするの?
-呼び出し関数:
void call_dll0207_48(struct DLL_STRPICENV *env, int *cmd);
void call_dll0207_48i(struct DLL_STRPICENV *env, int cmd...
-0207じゃなくてもいいんだけどね。
--ASKA的にいうと、オフセット0x0048をfar-call。
-質問:
--DLL_STRPICENVは64KBくらいにしようと思っているのですが、...
--DLL自身も64KBを要求。これでいいですよね?
*** 終端ファンクション
-ファンクションの最後につける
--0x0000
*** 初期化ファンクション
-ワークエリアの初期化
--0x0001, 0x0000
*** 識別ファンクション
-与えられたファイルの情報を取得
--0x0002, 0x0000, info, size, fp, hint
-infoは32バイトのワークエリアへのポインタ(intの配列)。...
--info[0]:画像ファイルタイプコード
--info[1]:カラーや各種フラグ
--info[2]:xsize
--info[3]:ysize
--info[4-7]:画像ファイルによって形式が違う領域
-sizeはファイルサイズ。
-fpはファイルがマッピングされているアドレス。
-hintはアプリ側がこのファイルの形式はこれじゃないか?とい...
*** 基本デコードファンクション
-与えられたファイルを所定の形式に単純展開
--0x0004, 0x0000, f_type, size, fp, b_type, buf, skip
-これは、拡大も縮小もクリッピングもない、単純明快な展開フ...
-f_typeはファイルの画像ファイルタイプコード。
-sizeはファイルサイズ。
-fpはファイルがマッピングされているアドレス。
-b_typeは展開先のバッファタイプ。
-bufはバッファへのポインタ。
-skipは、1ライン展開した所から次のライン先頭へポインタを...
-何らかの理由で展開に失敗した場合、env->errorが0以外にな...
*** 部分デコードファンクション
--0x0005, 0x0000, f_type, f_xsz, f_ysz, f_x0, f_y0, size,...
-これは、拡大も縮小もないけどクリッピングはある、そういう...
-f_typeはファイルの画像ファイルタイプコード。
-f_xszとf_yszは共に符号なし整数で、展開領域のサイズを表わ...
-f_x0とf_y0も符号なし整数で、ファイル上での展開開始座標(...
--f_x0 + f_xsz <= info[2], f_y0 + f_ysz <= info[3]である。
--f_xsz、f_ysz、f_x0、f_y0で指定された画像に対して、基本...
-sizeはファイルサイズ。
-fpはファイルがマッピングされているアドレス。
-b_typeは展開先のバッファタイプ。
-bufはバッファへのポインタ。
-skipは、1ライン展開した所から次のライン先頭へポインタを...
-何らかの理由で展開に失敗した場合、env->errorが0以外にな...
* そのほかの規定
-envの最初の32バイトについて。
--error:エラーコード
--errp:エラーコードを起こしたファンクションへのポインタ
--残り24バイトは未定
-画像ファイルタイプコード:
|0x0000|unknown|
|0x0001|BMP|
|0x0002|JPEG|
|0x0003|PNG|
|0x0004|ICO|
-バッファタイプコード:
|0x0101|3bitカラー (0と9~15のみを使う -- 美しさ優先)|
|0x0201|4bitカラー (美しさ優先)|
|0x0801|6bitカラー (シェル用 -- 美しさ優先)|
|0x0002|16bitカラー (美しさ優先 -- 特に理由がなければ普通...
|0x0004|32bitカラー (美しさ優先 -- 特に理由がなければ普通...
|0x8101|3bitカラー (0と9~15のみを使う -- 展開速度優先)|
|0x8201|4bitカラー (展開速度優先)|
|0x8002|16bitカラー (展開速度優先)|
|0x8004|32bitカラー (展開速度優先)|
-エラーコード
|0|エラーなし|
|1|ファンクションコードエラー|
|2|ファンクションパラメータエラー|
* DLLの実装
-test049dの
int *cmd_vsprintf(struct STR_DLLENV *env, int *cmd)
-みたいな関数を作ることになります。これは[[K]]がやります...
int info_BMP(struct DLL_STRPICENV *env, int *info, int s...
int info_JPEG(struct DLL_STRPICENV *env, int *info, int ...
-という関数を作ってください。これは自分が解釈できる形式だ...
int decode0_BMP(struct DLL_STRPICENV *env, int size, UCH...
int decode0_JPEG(struct DLL_STRPICENV *env, int size, UC...
-という関数もほしいです。これは成功したら0を返します。失...
-それぞれ、Cで書いてもASKAで書いてもNASMで書いても構いま...
-最初のうちは、気に入らないパラメータ指定を受け取ったら、...
-この2つについてやりたい人は、こめんと欄で名乗り出てくだ...
-他の画像形式でサポートしたいのがあればそれも名乗り出てく...
-僕は上記関数以外の全てを今から作ります。
-できればライセンスはKL-01でお願いします。
* こめんと欄
-できるだけ本文をいじらないようにして、ご意見はこのこめん...
-以前のやり取りはこちら → [[DLL/PICTURE0/oldlog]]
-そこそこ動くようになったらWabaで使わせてもらいます。 -- ...
-JPEGデコードルーチンを改良して、kjpegls相当にしました。4...
-http://osask.ne.nu/test050c.lzh (17.3KB) PICTURE0.BINは3...
-まあ対kjpeglsで+586バイトなら許せる気がするので、kjpegls...
-あとは、もうここは改造しないだろうと思われるところから、...
-プチ報告。ADVにDLLがつけれました。多分。 -- [[ZAKKY...
-ver.4.2くらいで、OSASK自身も必要に応じてこのDLLを使って...
-そのためには、DLLが4bitカラー減色とシェル専用64色カラー...
-今のOSASK内蔵ルーチンを改造すれば行単位での誤差拡散減色 ...
-BMPルーチンできました (高速モードのみ)。http://user.ecc....
-ええと、ソースを読みました。64KB中にstaticな領域がほしい...
-http://osask.ne.nu/test050d.lzh (23.1KB) バグなのか仕様...
-staticな領域はBMPでは要りませんが、JPEGのように大きなテ...
-ディザなどはしていないので、縦線が入るのはバグです。発見...
-教えてもらったところを直したら、なおりました。ありがとう...
-BMP,JPGともPICTURE0に関連付けという認識でOKですか? -- [[...
-いえ、今回は間に合わなかったので、JPGだけです。>関連付...
-I.Tak.さんへ:I.Tak.さんが各種バグフィクスをしたPICTURE0...
-各種じゃなくて一箇所だけですので (MLで書いた一箇所だけ)…...
-了解です。お返事が遅くなってすみません(書いたつもりにな...
-PICTURE0.BINって透明色の扱いを何も考えていなかったのです...
-安全のためには、ベータ値つき32bitカラーモード、っていう...
-いやどうせなら、GIFアニメなどを意識して、nコマ目を指定し...
-パレット付きをパレット付きとして取得する機能は無いわけで...
-さすがI.Tak.さん、あたまいい!・・・ってことはnコマ目指...
-なんかこのページに書かないまま進んでしまいましたが, タイ...
-了解です。 -- [[K]] &new{2005-07-17 (日) 10:03:57};
#comment
終了行:
* 画像ファイル一般を扱えるデコーダDLL
-・・・をみんなで作ろうかな、というプロジェクト。
* なんでDLLにするの?
-ええとOSASKの予定では、この手の機能はいずれAPIとして実装...
* どんなDLLにするの?
-呼び出し関数:
void call_dll0207_48(struct DLL_STRPICENV *env, int *cmd);
void call_dll0207_48i(struct DLL_STRPICENV *env, int cmd...
-0207じゃなくてもいいんだけどね。
--ASKA的にいうと、オフセット0x0048をfar-call。
-質問:
--DLL_STRPICENVは64KBくらいにしようと思っているのですが、...
--DLL自身も64KBを要求。これでいいですよね?
*** 終端ファンクション
-ファンクションの最後につける
--0x0000
*** 初期化ファンクション
-ワークエリアの初期化
--0x0001, 0x0000
*** 識別ファンクション
-与えられたファイルの情報を取得
--0x0002, 0x0000, info, size, fp, hint
-infoは32バイトのワークエリアへのポインタ(intの配列)。...
--info[0]:画像ファイルタイプコード
--info[1]:カラーや各種フラグ
--info[2]:xsize
--info[3]:ysize
--info[4-7]:画像ファイルによって形式が違う領域
-sizeはファイルサイズ。
-fpはファイルがマッピングされているアドレス。
-hintはアプリ側がこのファイルの形式はこれじゃないか?とい...
*** 基本デコードファンクション
-与えられたファイルを所定の形式に単純展開
--0x0004, 0x0000, f_type, size, fp, b_type, buf, skip
-これは、拡大も縮小もクリッピングもない、単純明快な展開フ...
-f_typeはファイルの画像ファイルタイプコード。
-sizeはファイルサイズ。
-fpはファイルがマッピングされているアドレス。
-b_typeは展開先のバッファタイプ。
-bufはバッファへのポインタ。
-skipは、1ライン展開した所から次のライン先頭へポインタを...
-何らかの理由で展開に失敗した場合、env->errorが0以外にな...
*** 部分デコードファンクション
--0x0005, 0x0000, f_type, f_xsz, f_ysz, f_x0, f_y0, size,...
-これは、拡大も縮小もないけどクリッピングはある、そういう...
-f_typeはファイルの画像ファイルタイプコード。
-f_xszとf_yszは共に符号なし整数で、展開領域のサイズを表わ...
-f_x0とf_y0も符号なし整数で、ファイル上での展開開始座標(...
--f_x0 + f_xsz <= info[2], f_y0 + f_ysz <= info[3]である。
--f_xsz、f_ysz、f_x0、f_y0で指定された画像に対して、基本...
-sizeはファイルサイズ。
-fpはファイルがマッピングされているアドレス。
-b_typeは展開先のバッファタイプ。
-bufはバッファへのポインタ。
-skipは、1ライン展開した所から次のライン先頭へポインタを...
-何らかの理由で展開に失敗した場合、env->errorが0以外にな...
* そのほかの規定
-envの最初の32バイトについて。
--error:エラーコード
--errp:エラーコードを起こしたファンクションへのポインタ
--残り24バイトは未定
-画像ファイルタイプコード:
|0x0000|unknown|
|0x0001|BMP|
|0x0002|JPEG|
|0x0003|PNG|
|0x0004|ICO|
-バッファタイプコード:
|0x0101|3bitカラー (0と9~15のみを使う -- 美しさ優先)|
|0x0201|4bitカラー (美しさ優先)|
|0x0801|6bitカラー (シェル用 -- 美しさ優先)|
|0x0002|16bitカラー (美しさ優先 -- 特に理由がなければ普通...
|0x0004|32bitカラー (美しさ優先 -- 特に理由がなければ普通...
|0x8101|3bitカラー (0と9~15のみを使う -- 展開速度優先)|
|0x8201|4bitカラー (展開速度優先)|
|0x8002|16bitカラー (展開速度優先)|
|0x8004|32bitカラー (展開速度優先)|
-エラーコード
|0|エラーなし|
|1|ファンクションコードエラー|
|2|ファンクションパラメータエラー|
* DLLの実装
-test049dの
int *cmd_vsprintf(struct STR_DLLENV *env, int *cmd)
-みたいな関数を作ることになります。これは[[K]]がやります...
int info_BMP(struct DLL_STRPICENV *env, int *info, int s...
int info_JPEG(struct DLL_STRPICENV *env, int *info, int ...
-という関数を作ってください。これは自分が解釈できる形式だ...
int decode0_BMP(struct DLL_STRPICENV *env, int size, UCH...
int decode0_JPEG(struct DLL_STRPICENV *env, int size, UC...
-という関数もほしいです。これは成功したら0を返します。失...
-それぞれ、Cで書いてもASKAで書いてもNASMで書いても構いま...
-最初のうちは、気に入らないパラメータ指定を受け取ったら、...
-この2つについてやりたい人は、こめんと欄で名乗り出てくだ...
-他の画像形式でサポートしたいのがあればそれも名乗り出てく...
-僕は上記関数以外の全てを今から作ります。
-できればライセンスはKL-01でお願いします。
* こめんと欄
-できるだけ本文をいじらないようにして、ご意見はこのこめん...
-以前のやり取りはこちら → [[DLL/PICTURE0/oldlog]]
-そこそこ動くようになったらWabaで使わせてもらいます。 -- ...
-JPEGデコードルーチンを改良して、kjpegls相当にしました。4...
-http://osask.ne.nu/test050c.lzh (17.3KB) PICTURE0.BINは3...
-まあ対kjpeglsで+586バイトなら許せる気がするので、kjpegls...
-あとは、もうここは改造しないだろうと思われるところから、...
-プチ報告。ADVにDLLがつけれました。多分。 -- [[ZAKKY...
-ver.4.2くらいで、OSASK自身も必要に応じてこのDLLを使って...
-そのためには、DLLが4bitカラー減色とシェル専用64色カラー...
-今のOSASK内蔵ルーチンを改造すれば行単位での誤差拡散減色 ...
-BMPルーチンできました (高速モードのみ)。http://user.ecc....
-ええと、ソースを読みました。64KB中にstaticな領域がほしい...
-http://osask.ne.nu/test050d.lzh (23.1KB) バグなのか仕様...
-staticな領域はBMPでは要りませんが、JPEGのように大きなテ...
-ディザなどはしていないので、縦線が入るのはバグです。発見...
-教えてもらったところを直したら、なおりました。ありがとう...
-BMP,JPGともPICTURE0に関連付けという認識でOKですか? -- [[...
-いえ、今回は間に合わなかったので、JPGだけです。>関連付...
-I.Tak.さんへ:I.Tak.さんが各種バグフィクスをしたPICTURE0...
-各種じゃなくて一箇所だけですので (MLで書いた一箇所だけ)…...
-了解です。お返事が遅くなってすみません(書いたつもりにな...
-PICTURE0.BINって透明色の扱いを何も考えていなかったのです...
-安全のためには、ベータ値つき32bitカラーモード、っていう...
-いやどうせなら、GIFアニメなどを意識して、nコマ目を指定し...
-パレット付きをパレット付きとして取得する機能は無いわけで...
-さすがI.Tak.さん、あたまいい!・・・ってことはnコマ目指...
-なんかこのページに書かないまま進んでしまいましたが, タイ...
-了解です。 -- [[K]] &new{2005-07-17 (日) 10:03:57};
#comment
ページ名: