新しく発言する EXIT インデックスへ
画像をテキストアートにする

  画像をテキストアートにする 山中和義 2007/10/23 19:55:36 

  画像をテキストアートにする 山中和義 2007/10/23 19:55:36  ツリーへ

画像をテキストアートにする 返事を書く ノートメニュー
山中和義 <drdlxujciw> 2007/10/23 19:55:36


!カラー画像をモノトーンに変換して、文字で濃淡を表現する。
!HTML文書(ファイル名 TEXTART.HTM)を作成するので、ブラウザで確認する。

LET N=10 !階調(トーン)

DIM c$(0 TO N-1) !文字セット
DATA "国","田","回","米","#","三","=","〜",":"," " !濃〜淡
MAT READ c$


SET COLOR MODE "NATIVE"
GLOAD "c:\BASICw32\SAMPLE\ZENKOUJI.JPG" !画像を読み込む

ASK PIXEL SIZE (0,0; 1,1) w,h !画像の縦横の大きさ(ピクセル単位)を調べる
DIM p(w,h),q(w,h) !画像の大きさに対応する配列要素を用意する
ASK PIXEL ARRAY (0,1) p !画像の各点の色情報を配列に格納する

PRINT "画像の大きさ 縦:";h;" 横:";w
SET BITMAP SIZE w,h !ウィンドウの大きさを画像に合わせる


LET Drive$="C:" !ドライブ名
LET Path$="\My Documents" !パス名
LET Source$="TEXTART.HTM" !ファイル名
LET FileName$=Drive$&Path$&"\"&Source$

WHEN EXCEPTION IN
OPEN #1: NAME FileName$ !ファイルを開く
USE
PRINT "ファイルが作成できません。"
STOP
END WHEN
ERASE #1

PRINT #1: "<html><head><title>テキストアート</title></head>" !簡易HTML文書
PRINT #1: "<body><font size="&CHR$(34)&"1"&CHR$(34)&" color="&CHR$(34)&"#333300"&CHR$(34)&"><pre>"


FOR y=1 TO h
FOR x=1 TO w
LET c=p(x,y) !指定位置の画素を読み込む
LET R=MOD(c,256) !RGBに変換する
LET tmp=INT(c/256)
LET G=MOD(tmp,256)
LET B=INT(tmp/256)

!---------------↓↓↓↓↓---------------
LET t=INT(0.298912*R + 0.586611*G + 0.114477*B) !グレイスケール(NTSC係数による加重平均法) 輝度Y

LET d=INT(t*N/256) !文字で濃淡を表す
PRINT #1: c$(d);

LET nR=INT(d*256/N) !変換後のRGB
LET nG=nR
LET nB=nR
!---------------↑↑↑↑↑---------------

LET q(x,y)=(nB*256+nG)*256+nR !指定位置の画素に書き込む
NEXT x
PRINT #1
NEXT y


PRINT #1: "</pre></body></html>"
CLOSE #1


MAT PLOT CELLS, IN 0,1; 1,0: q !画像を表示する

END


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