[OSASK 5081] Re: LIBR_BMP 0.2

  こんにちは、川合です。


rakkyo さんは 2002/09/29 23:49:22 の「[OSASK 5080] Re: LIBR_BMP
0.2」で書きました:

>filesizeは、ファイル処理の部分を何かのソースから取ってきたので、それの残
>骸です。(一応使っている。
>	areasize = lib_readCSd(0x0014) & ~0xfff;
>	if ((filesize = lib_readmodulesize(0x0210)) > areasize) {
>		filesize = areasize;
>	}
>辺りで使っています。(file:??kをオーバーしていたときの騙し??

  ええと、これについてですが、これはfilesizeを使っているのではな
く、単に値を設定しているだけです。こうやって苦労して値を設定した
のに、この後一度も参照されません。

>>  グラフィックボックスの使い方もおかしいです。ウィンドウの同じ場
>> 所に重ねてはいけません。
>重ねてなかったつもりなのですが...
>どこでしょうか??

  大変申し訳ありません。これはらっきょさんのおっしゃるとおり、問
題無しです。シグナルボックスの方に気を取られて、意味の分からない
ことを書いてしまいました。グラフィックボックスの使い方に問題はあ
りません。混乱させてしまってすみませんでした。

>> ウィンドウタイトルがないのはまずいです。どうしてもうまくいかな
>> いようなら障害報告をください。
>これですが、例外が起きて止まってしまいます。
>lib9に変えたら動かなくなりました。
>gg00lib5辺りなのかな...graphboxがサポートされる前のライブラリでは、問題な
>く動いてました。
>
>以下の例外を出して止まります。(bochs20c使用)

  それはもちろんです。gg00lib9は、OSASK ver.2.3以降用です。bochs
20cはその名の通りOSASK ver.2.0なので、動きません。

>拡大縮小ってことですか...難しそうだな(^^;;
>検討しておきます。

  拡大縮小じゃないですよ?・・・つまりグラフィックボックスの任意
の場所に展開できるようにするってことです。今だとグラフィックボッ
クスのサイズとBMPのサイズは等しくなければいけないし、展開は必ず
グラフィックボックスの原点から行われるしで、大きなグラフィックボ
ックスをとって込み入った処理をしたいときに利用できないのです。

  そうですねえ、理想的には以下の2関数があればいいかなあ・・・。

void conv_bmpinfo(BMP_INFO *info, void *fp, int filesize);
    /* infoだけを取得する関数(エラーならinfo->x_sizeが0) */

void conv_bmpdata8(char *buf0, void *fp, int bx);
    /* 展開だけをする関数(bxはバッファのxサイズ) */

  この2つがあれば、とりあえず何でもできます。拡大縮小ならバッフ
ァをとってconv_bmpdata8()で展開した後、自前で処理すればいいわけ
です。左右反転とか上下反転とか90度回転とか、その辺はプログラマの
腕しだいでどうにでもできます。

  buf0の計算をちゃんとやればグラフィックボックスの原点以外にも使
えます。また展開前にinfoが分かるので、サイズが足りるかどうかもグ
ラフィックボックスをはみ出して死ぬ前に把握できます。


  それでは。

--
    川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/


ML番号でジャンプ
ML単語検索