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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0617
あかさbmp読み込み2解決


あかさ

リンク

2016/6/17(Fri) 18:04:54|NO.75894

bmpをバイナリ読み込みで表示しようとしているのですが、非常に読み込みが遅いです。
どうしたらもっと早くできるでしょうか?


#define IMAGE_NAME "img.bmp" exist IMAGE_NAME FileSize = strsize mes "FileSize: " + FileSize + " bytes" sdim buf, FileSize bload IMAGE_NAME, buf mes "--- Read File ---" sdim bfType wpoke bfType, 0, wpeek(buf, 0) bfOffBits = lpeek(buf, 10) bfSize = lpeek(buf, 2) bcWidth = lpeek(buf, 18) bcHeight = lpeek(buf, 22) bcBitCount = wpeek(buf, 28) screen 0, bcWidth, bcHeight mes "bfType: " + bfType mes "bfOffBits: " + bfOffBits mes "bfSize: " + bfSize mes "bcWidth: " + bcWidth mes "bcHeight: " + bcHeight mes "bcBitCount: " + bcBitCount if (bcBitCount != 24) & (bcBitCount != 32) { dialog "24bit, 32bit 以外はサポートされていません" end } wait 200 px = 0 py = bcHeight - 1 index = bfOffBits repeat bcHeight px = 0 repeat bcWidth b = peek(buf, index) g = peek(buf, index + 1) r = peek(buf, index + 2) if (bcBitCount == 24) { index += 3 } else { index += 4 } color r, g, b pset px, py px++ loop py-- loop

私はこの画像を使いました↓
https://www.google.co.jp/search?q=24bit+bmp&source=lnms&tbm=isch&sa=X&ved=0ahUKEwiloJSz167NAhWBpZQKHRjZD5EQ_AUICCgB&biw=1600&bih=746#imgrc=KDfIWgRCrN1J8M%3A



この記事に返信する


沢渡

リンク

2016/6/17(Fri) 18:42:51|NO.75895

pset命令は結構負荷がかかるようで、それで画面への描画が遅くなっているのだと思います。
この↓過去スレを参考に、VRAMに直接書き込む方法でやってみました。
http://hsp.tv/play/pforum.php?mode=pastwch&num=1662


#define IMAGE_NAME "img.bmp" exist IMAGE_NAME FileSize = strsize mes "FileSize: " + FileSize + " bytes" sdim buf, FileSize bload IMAGE_NAME, buf mes "--- Read File ---" sdim bfType wpoke bfType, 0, wpeek(buf, 0) bfOffBits = lpeek(buf, 10) bfSize = lpeek(buf, 2) bcWidth0 = lpeek(buf, 18) bcHeight = lpeek(buf, 22) bcBitCount = wpeek(buf, 28) bcWidth=bcWidth0 if bcWidth\4 : bcWidth = bcWidth + ( 4-bcWidth\4 ) //画面の横サイズが4の倍数になるように補正 screen 0, bcWidth, bcHeight if bcWidth!=bcWdth0 : width bcWidth0 mref vram,66 mes "bfType: " + bfType mes "bfOffBits: " + bfOffBits mes "bfSize: " + bfSize mes "bcWidth: " + bcWidth mes "bcHeight: " + bcHeight mes "bcBitCount: " + bcBitCount if (bcBitCount != 24) & (bcBitCount != 32) { dialog "24bit, 32bit 以外はサポートされていません" end } wait 200 px = 0 py = bcHeight - 1 if bcBitCount!=24 : bfOffBits++ index = bfOffBits repeat bcHeight index2=bcWidth*3*cnt //VRAMのアドレス repeat bcWidth0 b = peek(buf, index) poke vram,index2,b g = peek(buf, index + 1) poke vram,index2+1,g r = peek(buf, index + 2) poke vram,index2+2,r if (bcBitCount == 24) { index += 3 } else { index += 4 } index2 += 3 loop if cnt\16 =0 : redraw 1 //読み込む過程を表示しなくていいなら、この行は削除してよい loop redraw 1

ただ、画像の読み込みでしたら普通はpicloadを使うと思うのですが、バイナリ読み込みにしなくてはならない理由があるのでしょうか?



あかさ

リンク

2016/6/17(Fri) 19:02:09|NO.75896

おー速い!
VRAMというものがあるとは知りませんでした。

バイナリ読み込みをしている理由ですが、ただ単にやってみたかっただけです。
ありがとうございました!



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