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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0106
HT.自前でBMPを読み込むには2解決


HT.

リンク

2013/1/6(Sun) 23:01:37|NO.51695

HSPにてpicload命令を使用せずにビットマップを解析し表示してみたいのですが、
各構造体の取得などはできるものの描画に失敗?しているようです。
どこを直せば上手くいくのかご存知の方、ご教示くださいませ。

#uselib "gdi32.dll" #func SetDIBitsToDevice "SetDIBitsToDevice" int, int, int, int, int, int, int, int, int, int, int, int #define DIB_RGB_COLORS $00000000 file_name = "./sample/demo/bgtex.bmp" exist file_name file_size = strsize if file_size == -1 : mes "not found" : stop sdim file, file_size bload file_name, file, file_size dupptr bmfh, varptr(file), 14 ;BITMAPFILEHEADER offset_bits = lpeek(bmfh, 10) bits_size = file_size - offset_bits dupptr bmih, varptr(file) + 14, 40 ;BITMAPINFOHEADER cx = lpeek(bmih, 4) cy = lpeek(bmih, 8) mes "biWidth : " + cx mes "biHeight: " + cy mes "biBitCount: " + wpeek(bmih, 14) dupptr bits, varptr(file) + offset_bits, bits_size sdim bmi, 8 ;BITMAPINFO lpoke bmi, 0, varptr(bmih) lpoke bmi, 4, varptr(bits) SetDIBitsToDevice hdc, ginfo_cx, ginfo_cy, cx, cy, 0, cy, 0, cy, varptr(bits), varptr(bmi), DIB_RGB_COLORS mes "SetDIBitsToDevice: " + stat redraw



この記事に返信する


暇人

リンク

2013/1/7(Mon) 19:00:48|NO.51710

ちょっと勘違いしてるだけ

>sdim bmi, 8 ;BITMAPINFO
>lpoke bmi, 0, varptr(bmih)
>lpoke bmi, 4, varptr(bits)

>SetDIBitsToDevice hdc, ginfo_cx, ginfo_cy, cx, cy, 0, cy, 0, cy, varptr(bits), varptr(bmi), DIB_RGB_COLORS
これを

SetDIBitsToDevice hdc, ginfo_cx, ginfo_cy, cx, cy, 0, 0, 0, cy, varptr(bits), varptr(bmih), DIB_RGB_COLORS
に変更すれば良い(bmiは必要ない、p7は0で通常、-で下に開始位置がずれる)



HT.

リンク

2013/1/7(Mon) 22:25:07|NO.51711

>肥満人さん
あれれ…MSDNの記述に従ったつもりだったんですが違っていたんですね。
CreateDIBSectionを使ったC++のソースを模倣して同様に失敗していたので完全に手詰まりでした。
何はともあれ無事成功を確認できました。
ご回答頂きありがとうございました。



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