;---------- ---------- ---------- ---------- ---------- ; 作成者のURL ---> http://www.setsuki.com/ ;---------- ---------- ---------- ---------- ---------- ;========== ========== ========== ========== ========== ; BMP保存モジュール ;---------- ---------- ---------- ---------- ---------- ; ; bmp_save "filename",p1 ; "filename" : セーブするファイル名 ; p1=0〜8(0) : 色ビット ; 1 = 2色BMPとして保存 ; 4 = 16色BMPとして保存 ; 8 = 256色BMPとして保存 ; ; ※ 256色以下のBMPとして保存する場合は、 ;   画面をパレットモードにしておいて下さい。 ;   フルカラーモードの場合は、 ;   フルカラー(24bit)BMPとして保存します。 ; ; ※ パレットの使用数が、指定した色ビットより ;   多い場合は、単純な減色をします。 ; ;========== ========== ========== ========== ========== #module ;---------- ---------- ---------- ---------- ---------- #deffunc bmp_save str file, int p1 mref bm,67 ; フルカラーモードはフルカラーBMPとして保存 if ( bm.3 == 0 )||( p1 > 4 )||( p1 < 1 ) : bmpsave file : return ; ビット数を取得 if ( p1 == 1 ) : pbit = 1 : else : pbit = 4 imgx = ginfo_winx imgy = ginfo_winy pal = 1< pal { pnum = 0 : ck=0,0xc0,0xc0,0xff repeat 256 if ( p(cnt,1) == 0 ) : continue palcolor cnt if pbit < 2 { y = (ginfo_r+ginfo_g+ginfo_b)/2 if y < 255 : y=0 : else : y=0xffffff } else { y = ck(ginfo_r>>6)<<16 | ck(ginfo_g>>6)<<8 | ck(ginfo_b>>6) } a=-1 : repeat pnum if ( p(cnt,1) == y ) : a = cnt : break loop if ( a == -1 ) { p( cnt,0) = pnum p(pnum,1) = y memcpy buf, y, 3, pnum*4+54, 0 : pnum++ } else { p(cnt,0) = a } loop ; 使用色のみ取得してパレットに追加 } else { x = 0 repeat 256 if ( p(cnt,1) == 0 ) : continue palcolor cnt : y = ginfo_r<<16 | ginfo_g<<8 | ginfo_b p(cnt,0) = x memcpy buf, y, 3, x*4+54, 0 : x++ loop } ; 画像データを書き込む y=off repeat imgy x=wid3*cnt repeat wid2 a = 0 : b = 8-pbit repeat 8/pbit if x < (wid3*imgy) : a += p(peek(vm,x),0)<