[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 3235] Re: BMPV05 Release



rakkyo さん、こんにちは。I.Tak. です。

Fri, 15 Feb 2002 22:26:41 -0000 の
[OSASK 3227] Re: BMPV05 Release
に返信です。

>調子にのって、データの最後部の求め方を改良しようと思ったのですが、papiで
>止まってしまいます。
>0x03
>CS:EIP = 90:7E1

 私が実行したらcs:eip=7:125,int 3 で止まりましたよ?bmpv06にint3がしこんで
あります。
 そのときは eax=88 edx=80 となっていました。ここは画像の幅を eax に保持
しているはずなので(実験台はtest128.bmp)、アラインの計算をしくじったので
しょう。

 実はつい最近bmpv05を真面目に読んでみました。アラインの計算に面倒なことを
していたので、定石をお教えしましょう。
    eax += 7;
    eax &= ~7;
数字には(1<<n)-1を使ってください。これで2のべき乗の繰り上げができます。

 それから、変換後のデータはchar単位になっているようですね。
つまり、元のデータが
    123456**
    123456**
となっていると
    010203040506
    010203040506
と展開しているわけです。これはあまりよくありません。データはグラフィック
ボックスに限らず32bit単位で配置するべきです。つまり、
    0102030405060*0*
    0102030405060*0*
と展開する方が良いのです。ツメモノも一緒に展開してしまいましょう。
表示が高速になる可能性がありますし、プログラムも簡単になります。
 グラフィックボックスは表示する大きさとバッファの大きさを違えて
作れるので、「バッファの幅は8の倍数(元データの幅)に繰り上げるが、
表示幅は本来の大きさ(ヘッダに書いてある幅)」という設定にすると
合理的です。

 あと、グラフィックボックスって初期化しないオープンのオプションが
ありませんか? そういうのがあれば、データを展開してからフラッシュする
手間が省けます。データ展開、ボックスオープンという操作で全て済みます。

------------------------------------------------------------
I.Tak. <msy !Atmark! catvmics.ne.jp>
http://home1.catvmics.ne.jp/~msy/takhome.htm