HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
1230
プリンス翼hspdxを利用した画面描画について7未解決


プリンス翼

リンク

2007/12/30(Sun) 13:41:33|NO.12944

画面描画の高速化を目的に、hspdxを利用しようと、
既存のプログラムを書き換えています。

ところが、256色のビットマップ画像を描画しようとすると
色が抜け落ちてしまい、白黒画像になってしまいました。

パレット関連の関数を色々と駆使したのですが、解決できず、
原因が全く分かりません。

どなたか、解決方法をご教授頂けないでしょうか?

どうぞ宜しくお願い致します。


【スクリプト】

…途中省略…。

buffer 2,640,640,1 ;バッファ作成
pos 0,0 : picload "test.bmp",0 ;バッファへ読み込み


es_cls 0,0,0

es_buffer 0,0 ;オフスクリーンバッファへの転送
if stat=1 : goto *dxerr3 ;成否判定


gmode 0
pos 0,0

es_copy 0,0,0,640,640

es_sync
await 0


…終わり…。


プログラムは、単純に、256色ビットマップを画面描画するだけです。
上手く出来たら、作業を先に進めようとしている状況です。



この記事に返信する


レヴィン

リンク

2007/12/31(Mon) 01:45:48|NO.12951

とりあえず人にどこが問題なのか指摘してほしい時は、一発で動作するスクリプトを
掲載しないと、解決に時間がかかります。
特に「…途中省略…。」なんてされると余計に時間がかかります。
なぜかというと、「…途中省略…。」の部分はプリンス翼さんしかわからないからです。
このBBSにエスパーは多分いないので。

あと、できるだけ画像は用意してどこかにうpした方が親切です。



プリンス翼

リンク

2007/12/31(Mon) 14:13:05|NO.12957

レヴィンさん、こんにちは。

ご回答、ご指摘を頂きましてありがとうございます。
ソースファイルとビットマップファイルを準備しました。


【ソースファイル】

#include "hspdx.as"

;------------------------------------------------------------------

wx=640:wy=480 ; 画面の解像度の指定
es_ini ; system初期化
es_screen wx,wy,8 ; スクリーン初期化


if stat=1 : goto *dderr1
if stat=2 : goto *dderr2

goto *start ; 正常に完了

*dderr1
dialog "DirectXの初期化に失敗しました",1
end
*dderr2
dialog "スクリーンの初期化に失敗しました",1
end

*dxerr3
wait 100
;es_bye : wait 100

dialog "VRAMの容量が不足しています。",1 : end


;------------------------------------------------------------------

*start
gsel 0
es_cls
es_sync
await 0

;------------------------------------------------------------------
; ここから先に描画スクリプトを書いてください
;------------------------------------------------------------------

buffer 0,640,480,1 ;バッファ作成
pos 0,0


picload "test_640_480.bmp"

es_buffer 0 ;オフスクリーンバッファへの転送

if stat=1 : goto *dxerr3 ;成否判定

gmode 0
pos 0,0

es_copy 0,0,0,640,480

es_sync
await 0

wait 500

end


【ビットマップデータ】

  http://loto6.news.coocan.jp/etc/test_640_480.bmp


このプログラムは、256色のビットマップをDIRECTX経由で、表示して
しばらく画面に表示した後、終了するというものです。
ところが、色が抜け落ちてしまい、画像が白黒に表示されてしまいます。

どこに原因があるのか分からない状態です。どなたかお分かりになる方が
お見えでしたら、ご指導を頂きたく、宜しくお願い致します。



f

リンク

2008/1/1(Tue) 21:26:53|NO.12986

es_palcopyでパレットの情報をダイレクトXに送って無いからでね?



f

リンク

2008/1/1(Tue) 21:42:22|NO.12987

というか、この画像

screen 0,640,480,1
picload "test_640_480.bmp"

この段階でモノクロなのだが・・・。



f

リンク

2008/1/1(Tue) 22:07:32|NO.12988

・・・おや?

自前で256画像作ってみて、同じようにパレットモードで初期化したスクリーンに
picloadしてみても、グレースケールになるようだ。



f

リンク

2008/1/1(Tue) 22:22:49|NO.12989

・・・ふむ。

picloadする前に、bmppaletteでパレットをあらかじめ読んでやる必要があるようだ。
以前からこうであっただろうか?



プリンス翼

リンク

2008/1/2(Wed) 01:31:19|NO.12991

fさん、こんばんわ。

>>picloadする前に、bmppaletteでパレットをあらかじめ読んでやる必要があるようだ。
>>以前からこうであっただろうか?

ご教授を頂きましてありがとうございます! 早速、プログラムを書き換えてみました。

画像をロードするよりも先に、パレットを取り出し指定する必要があるということでしたので
以下の内容にしてみたところ、うまく動作しました!

これで問題が解決できました。本当にありがとうございました! 感謝です!


#include "hspdx.as"
#include "hsp3util.as"

;------------------------------------------------------------------

wx=640:wy=480 ; 画面の解像度の指定
es_ini ; system初期化
es_screen wx,wy,8 ; スクリーン初期化


if stat=1 : goto *dderr1
if stat=2 : goto *dderr2

goto *start ; 正常に完了

*dderr1
dialog "DirectXの初期化に失敗しました",1
end
*dderr2
dialog "スクリーンの初期化に失敗しました",1
end

*dxerr3
wait 100
;es_bye : wait 100

dialog "VRAMの容量が不足しています。",1 : end


;------------------------------------------------------------------

*start
gsel 0
es_cls
es_sync
await 0

;------------------------------------------------------------------
; ここから先に描画スクリプトを書いてください
;------------------------------------------------------------------

buffer 0,640,480,1 ;バッファ作成
pos 0,0

; 追加した2行です↓「hsp3util.as」のインクリュードも追加しました。
bmppalette "test_640_480.bmp"
palette -1,,,,1


picload "test_640_480.bmp"

es_buffer 0 ;オフスクリーンバッファへの転送

if stat=1 : goto *dxerr3 ;成否判定

gmode 0
pos 0,0

es_copy 0,0,0,640,480

es_sync
await 0

wait 500

end



ONION software Copyright 1997-2023(c) All rights reserved.