遊び tokidoki 仕事

数学と音楽と教育と遊び

Top | おしごと | ゼミ | がくせい | すうがく | かがく | きょういく | おんがく | おきにー | Tips | Photo | イベント | ものもう | あれこれ | About

CSVからBMPへ

調子に乗って、今度はCSVからBMPへ戻すプログラム。
3枚のCSV化した画像データを
EXCELシート上で「目に見える形で」フィルター処理をして、
それを再び10進BASICでBMPに戻すわけだ。


10進BASICプログラム→[csv2bmp.bas]

REM [csv2bmp.bas]
REM RGBに分解された3つのCSVファイルからBMP画像データを作る
REM
REM office2003のEXCELシート互換にするため
REM BMPの横幅は256pxまで、縦幅は65536pxまで
REM
REM [使用法]
REM (1)このプログラムと同じフォルダに加工後のRGBデータ
REM       ○○_rr_out.csv,○○_gg_out.csv,○○_bb_out.csv
REM ファイルを置く
REM (2)読み込むCSVファイル名はf$="○○"で指定する
REM (3)実行すると3つのCSVファイルを読み込み
REM       ○○_out.bmp
REM としてBMPファイルが同じフォルダに出力される

OPTION ARITHMETIC NATIVE
SET COLOR MODE "NATIVE"
LET  f$="neko"
!比較のためあらかじめ原画像も表示しておく
GLOAD f$ & ".bmp"
ASK PIXEL SIZE (0,0; 1,1) bw,bh
DIM bc(bw,bh), rr(bw,bh), gg(bw,bh), bb(bw,bh), bf(bw,bh)
DIM dr(bw), dg(bw), db(bw)
ASK PIXEL ARRAY (0,1) bc
SET BITMAP SIZE bw,bh

OPEN #1:NAME f$ & "_rr_out.csv", RECTYPE INTERNAL
OPEN #2:NAME f$ & "_gg_out.csv", RECTYPE INTERNAL
OPEN #3:NAME f$ & "_bb_out.csv", RECTYPE INTERNAL
FOR y=1 TO bh
   MAT READ #1: dr
   MAT READ #2: dg
   MAT READ #3: db
   FOR x=1 TO bw
      LET  rr(x,y)=MAX(MIN(dr(x),255),0)
      LET  gg(x,y)=MAX(MIN(dg(x),255),0)
      LET  bb(x,y)=MAX(MIN(db(x),255),0)
   NEXT x
NEXT y
CLOSE #3
CLOSE #2
CLOSE #1

MAT gg=256*gg
MAT bb=65536*bb
MAT bf=rr+gg
MAT bf=bc+bb

!一瞬だけ変換後のBMPを表示してBMPファイルとして保存
MAT PLOT CELLS, IN 0,1; 1,0 :bf
GSAVE f$ & "_out.bmp"

!その後、変換前と後を並べて表示
SET BITMAP SIZE bw*2,bh*2
MAT PLOT CELLS, IN 0,1; 1/2,1/2 :bc
MAT PLOT CELLS, IN 0,1/2; 1/2,0 :bf

END