つづき
!---------- 画像データ部 LET p=bfOffBits !ファイル内の画像データの先頭位置 CALL fseek(p) FOR y=1 TO biHeight SELECT CASE biBitCount CASE 1,4 LET t=biWidth*biBitCount/8 IF MOD(t,4)>0 THEN LET t=t+4-MOD(t,4) !4バイト境界 LET BData$=REPEAT$(CHR$(0),t) !1行分の画像データ CALL fread(BData$,p) !Get #1, ,BData FOR x=0 TO t-1 PRINT "(";8/biBitCount*x+1;",";y;")", LET b=CVI2(BData$,x,SizeOf("Byte","")) IF biBitCount=1 THEN PRINT right$("0000000"&BSTR$(b,2),8) ELSE PRINT INT(b/16); !上4bit PRINT MOD(b,16) !下4bit END IF NEXT x CASE ELSE FOR x=1 TO biWidth !1行分の画像データ LET BData$=REPEAT$(CHR$(0),biBitCount/8) !1ピクセル分の画像データ CALL fread(BData$,p) !Get #1, ,BData PRINT "(";x;",";y;")", FOR k=0 TO biBitCount/8-1 !256,24ビット,32ビット色 PRINT CVI2(BData$,k,SizeOf("Byte","")); !BData ※符号なし NEXT k PRINT NEXT x LET t=MOD(biWidth*biBitCount/8,4) !4バイト境界 ※32ビット色は必要なし IF t>0 THEN FOR k=t+1 TO 4 LET dummy$=CHR$(0) CALL fread(dummy$,p) !Get #1, ,dummy PRINT CVI(dummy$,0,SizeOf("Byte","")); PRINT NEXT k END IF END SELECT NEXT y
CLOSE #1
!ファイル関連 SUB fseek(p) !読み込み位置を設定する IF p<cp THEN !前へ SET #1: POINTER BEGIN LET cp=0 END IF FOR i=1 TO p-cp !skip it CHARACTER INPUT #1: tmp$ NEXT i LET cp=p !現在位置の更新 END SUB SUB fread(r$,p) !レコードを読み込む FOR i=1 TO LEN(r$) !read it CHARACTER INPUT #1: r$(i:i) NEXT i LET p=p+LEN(r$) !現在位置の更新 LET cp=p END SUB
END
|