;初期設定 title "「BMP 256 to 16」 ver1.0" dim filenam,20 dim pltlst,16,4 dim plttbl,256 sdim txtbuf,1000000 sdim outbuf,500000 ;入力ファイル名の配列作成 notesel filelst dirlist filelst,"*.bmp" if stat=0 :stop iptmax=notemax repeat iptmax noteget linebuf,cnt filenam(cnt)=linebuf loop noteunsel ;各ファイルを変換 repeat iptmax bload filenam(cnt),txtbuf ;入力ヘッダのチェック if peek(txtbuf,0) != 'B':print"エラー("+filenam(cnt)+"):入力ファイルの先頭がBMでない":continue if peek(txtbuf,1) != 'M':print"エラー("+filenam(cnt)+"):入力ファイルの先頭がBMでない":continue if peek(txtbuf,14) != 40:print"エラー("+filenam(cnt)+"):入力ファイルのヘッダサイズが40でない":continue if peek(txtbuf,16+2) != $80:print"エラー("+filenam(cnt)+"):画像の幅が640でない":continue if peek(txtbuf,16+3) != $02:print"エラー("+filenam(cnt)+"):画像の幅が640でない":continue if peek(txtbuf,16+6) != $90:print"エラー("+filenam(cnt)+"):画像の高さが400でない":continue if peek(txtbuf,16+7) != $01:print"エラー("+filenam(cnt)+"):画像の高さが400でない":continue if peek(txtbuf,16+12) != 8:print"エラー("+filenam(cnt)+"):画像の色数が256でない":continue ;出力ヘッダの作成 poke outbuf,0,'B' poke outbuf,1,'M' poke outbuf,2,$76 poke outbuf,3,$F4 poke outbuf,4,$01 poke outbuf,5,$00 poke outbuf,6,0 poke outbuf,7,0 poke outbuf,8,0 poke outbuf,9,0 poke outbuf,10,$76 poke outbuf,11,0 poke outbuf,12,0 poke outbuf,13,0 poke outbuf,14,$28 poke outbuf,15,0 poke outbuf,16,0 poke outbuf,17,0 poke outbuf,18,$80 poke outbuf,19,2 poke outbuf,20,0 poke outbuf,21,0 poke outbuf,22,$90 poke outbuf,23,1 poke outbuf,24,0 poke outbuf,25,0 poke outbuf,26,1 poke outbuf,27,0 poke outbuf,28,4 poke outbuf,29,0 poke outbuf,30,0 poke outbuf,31,0 poke outbuf,32,0 poke outbuf,33,0 poke outbuf,34,0 poke outbuf,35,$F4 poke outbuf,36,1 poke outbuf,37,0 poke outbuf,38,$C4 poke outbuf,39,$0E poke outbuf,40,0 poke outbuf,41,0 poke outbuf,42,$C4 poke outbuf,43,$0E poke outbuf,44,0 poke outbuf,45,0 poke outbuf,46,0 poke outbuf,47,0 poke outbuf,48,0 poke outbuf,49,0 poke outbuf,50,0 poke outbuf,51,0 poke outbuf,52,0 poke outbuf,53,0 ;新しいパレットの作成 dif=8 *LDIF repeat 256 plttbl(cnt)=255 loop ofst = peek(txtbuf,11)*256 + peek(txtbuf,10) m = -1 for i , ofst , ofst + 640*400 if plttbl(peek(txtbuf,i))<255 :_continue b = peek(txtbuf , 54 + 4 * peek(txtbuf,i)) g = peek(txtbuf , 55 + 4 * peek(txtbuf,i)) r = peek(txtbuf , 56 + 4 * peek(txtbuf,i)) y = peek(txtbuf , 57 + 4 * peek(txtbuf,i)) for j , 0 , m+1 if abs(pltlst(j,0)-b) 15 :_break pltlst(m,0) = b pltlst(m,1) = g pltlst(m,2) = r pltlst(m,3) = y plttbl(peek(txtbuf,i))=m next if m>15 : dif=dif+1 : goto *LDIF ;パレットデータの書き出し for i , 0 , 16 poke outbuf,54+i*4,pltlst(i,0) poke outbuf,55+i*4,pltlst(i,1) poke outbuf,56+i*4,pltlst(i,2) poke outbuf,57+i*4,pltlst(i,3) next ;イメージデータの書き出し j = 0 for i , ofst , ofst + 640*400 , 2 poke outbuf , 54+16*4+j , plttbl(peek(txtbuf,i))*16 + plttbl(peek(txtbuf,i+1)) j=j+1 next orgfil = filenam(cnt) orgfil = strmid(orgfil , 0 , instr(orgfil,0,".bmp")) + ".org" bcopy filenam(cnt),orgfil bsave filenam(cnt) , outbuf , 54+16*4+320*400 loop print"処理終了" *LEND print"画面を閉じてください" stop