Path: chuka.playstation.co.uk!news1.scei.co.jp!usenet From: minoru@isl.intec.co.jp (Minoru Matsumoto) Newsgroups: playstation.ny.program.questions Subject: Re: =?ISO-2022-JP?B?GyRCI2sjciNvI20jMiN0I2kjbSRLJEQkJCRGGyhC?= Date: 3 Feb 1998 16:30:15 GMT Organization: INTEC System Laboratory Inc. Ltd. Lines: 45 Message-ID: <34d743f8pc171@base.minoru.isl.intec.co.jp> References: <6b4jpa$cga@news1.scei.co.jp> NNTP-Posting-Host: 202.226.28.133 Mime-Version: 1.0 Content-Type: Text/Plain; charset=ISO-2022-JP X-Newsreader: WinVN 0.99.7J PL01 (x86 32bit) cqz03222 の松本 実です。 In article <6b4jpa$cga@news1.scei.co.jp>, IZC05326@niftyserve.or.jp says... > >krom2timの使い方がよくわかりませ。 >どうやって使えばよいのでしょうか? >そのあとどうやって表示するかもわかりません。 >その辺を教えてもらえないでしょうか? >よろしくお願いします。 >ではでは。。。。 Krom2Tim() を呼ぶと、漢字ROM データが TIM 形式に展開されるので、 GsGetTimInfo() で ビットマップと clut に分離し、それぞれ VRAM に 転送します。こんな感じです。 void ExpandKanjiStr(u_char *kstr, int fg, int bg) { RECT rc1, rc2; GsImage tim; /* SJIS 漢字のみ含むとする */ u_long *tmp = (u_long *)malloc(strlen(kstr) * 128 / 2 + 84); /* dx, dy, cx, dy は VRAM 上でのアドレス */ /* 本当はメモリマップを考えるべきだが、 */ /* とりあえず、通常は画面に映らないところに置く */ Krom2Tim(kstr, tmp, 640, 0, 0, 480, fg, bg); GsGetTimInfo(tmp + 1, &tim); setRECT(&rc1, tim.px, tim.py, tim.pw, tim.ph); LoadImage(&rc1, tim.pixel); if ((tim.pmode & 3) < 2) { setRECT(&rc2, tim.cx, tim.cy, tim.cw, tim.ch); LoadImage(&rc2, tim.clut); } DrawSync(0); free(tmp); } あとは上の例なら、通常のループ中で、(640, 0) - (640 + 文字数 × 16, 16) をビットマップとして、(0, 480) - (16, 480) の領域を clut として GsSortFastSprite() などで転送してやれば表示できます。 なお、Krom2Tim() はものすごくスタックを食うので、プログラムは 0x801d0000 以下に配置した方が無難です。 ---