hspってパレットモード以外なら24ビットのVRAMになるのに
デスクトップが16ビットだからって24ビットのBMP読み込んで
減色されるのは変かもねぇ・・・(減色が必要な場合は自前より全然高速に出来るけど)
普通の24BitBMPならデータ部分を、そのままVRAMに、流しこめるから簡単なんだけど・・・
//true colorBMPをそのまま読み込む(24bitベタBMP限定)
#module "bmpt"
#const TEMPID 100
#const BFTYPE 0
#const BFOFFBITS 10
#const BIWIDTH 14+4
#const BIHEIGHT 14+8
#const BIBICOUNT 14+14
#const BICOPMRESSION 14+16
#const TYPEBMP ('m'<<8)+('b')
//%1ファイルネーム %2読込バッファID(省略時100、-1の時は現在のバッファ)
//%3現在のウィンドウにコピーするか(0=しない、1=する) %4,%5コピーする場所
#define global bmptload(%1,%2=TEMPID@bmpt,%3=0,%4=0,%5=0) _bmptload %1,%2,%3,%4,%5
#deffunc _bmptload str fnam,int gselno,int copy,int posx,int posy
exist fnam
fsiz=strsize
if fsiz<=0{return -100};読み込めない(エラーNO -100)
dim fhed,54
bload fnam,fhed,54,0
bmptype=wpeek(fhed,0)|$2020
bmpcol=wpeek(fhed,BIBICOUNT)
if (TYPEBMP=bmptype) {
if bmpcol!24{return -bmpcol};24ビット色以外(エラーNO -色モード)
bmpfos=lpeek(fhed,BFOFFBITS)
bmpsaizw=lpeek(fhed,BIWIDTH)
bmpsaizh=lpeek(fhed,BIHEIGHT)
bmpc=wpeek(fhed,BICOPMRESSION)
if (fsiz>=(bmpsaizw*bmpsaizh*3)) and (bmpc=0){
dim vram,1
actid=ginfo(3)
if gselno>=0{buffer gselno,bmpsaizw,bmpsaizh,0}else{buffer actid,bmpsaizw,bmpsaizh,0}
mref vram,66
bload fnam,vram,-1,bmpfos
bmpid=ginfo(3)
gsel actid,1
if copy=1{pos posx,posy:gcopy bmpid,0,0,bmpsaizw,bmpsaizh}
}else{return -300};画像がファイルサイズサイズより大きすぎる、又は圧縮されてる(エラーNO -300)
}else{return -200};bmpファイルじゃない(エラーNO -200)
return
#global
バッファID10に読み込んで、現在のウィンドウにコピー
bmptload "filename",10,1,100,100
自己レス
>一応モジュールで色が修正されないのが付いている
3.1β5でmod_img.asを使ってみたら、エラーもなしにエディターが終了した・・・
(他に編集中の物があったのに・・・)
#スクリプトの間違いがあったのでレスを削除して修正しました。(すみません)
#if gselno>=0{buffer gselno,bmpsaizw,bmpsaizh}e,0lse{buffer actid,bmpsaizw,bmpsaizh,0}
#を
#if gselno>=0{buffer gselno,bmpsaizw,bmpsaizh,0}else{buffer actid,bmpsaizw,bmpsaizh,0}
#(ここにコピペしてからいじると間違えやすいな・・・)