新しく発言する  EXIT  インデックスへ

構造体、レコード型でのバイナリファイルへ...


  構造体、レコード型でのバイナリファイルへのアクセス 山中和義 2008/02/29 20:42:14  (修正1回)
  つづき 山中和義 2008/02/29 20:42:55  (修正1回)
Re: 構造体、レコード型でのバイナリファイルへのアクセス  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/02/29 20:42:55 ** この記事は1回修正されてます
つづき


!---------- 画像データ部
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
   └つづき(構造体、レコード型サポート関連) 山中和義 2008/02/29 20:44:04  (修正2回)
    └つづき(構造体定義部分) 山中和義 2008/02/29 20:46:12  (修正1回)
     └つづき 山中和義 2008/02/29 20:49:03  (修正1回)
      ├ネストする構造体の場合(親子関係) 山中和義 2008/03/03 13:19:43  (修正2回)
      └SUBStructDefの構造 山中和義 2008/03/04 10:48:06  (修正1回)

 インデックスへ  EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。