[osask 7186] Re: picture0+ico

こんばんは, I.Tak.です。[osask 7185]に返信です。

Akira Ouchi wrote:

>  現在、PICTURE0でicoファイルを読み込めるようにしているのですが、最後
> のデコードでアイコンが崩れてしまいます。bufの書き方に問題があるんだと
> 思いますが、どう問題なのかさっぱりわかりません…(^^;

1ピクセルあたりのバイト数を (b_type & 7) バイトにして出力しないと崩れて
しまいます (7じゃないかも知れません)。picture0.binをそのままビューワ
として使うと4バイトモードが使われますが……ico.cから引用:

> col = 0xC6C6C6;
> if ((dmask & mask[0]) == 0)
>     col = pal[e];
> buf[y * px + x] = col;

UCHAR *buf で宣言されてるので, 1ピクセルあたり1バイトですね。
崩れるわけです。それで, 例えば4バイトモードで出力するなら,

  int pixel_size = b_type & 7;
  /* 略 */
  int *line = (int*)&buf[y * (px * pixel_size + skip)];
  /* 略 */
  line[x] = col;

こんな感じです。


あと, static変数は使えません。もし今のままDLLとして使うと, 呼び出し元の
メモリを破壊する危険があります。というか破壊します。
アイコンの大きさなどはdecodeが呼ばれるたびにヘッダを読んで取得してください。


フルカラー(b_type=4)さえできてしまえば減色ルーチンが使えますが
……誤差拡散ルーチンの説明はどこにも書いてませんでしたか(^^;
使います?

I.Tak. <t40370@mail.ecc.u-tokyo.ac.jp>

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