画像データの読む込み/書き込み
基本的に以下のコマンドを知っていれば、画像データの読み込み/書き込みには事足りる。
TIFF画像の読み込み
図のようなグレースケールのTIFF画像(280*280画素)を読み込む場合は以下の通り。
file=Dialog_Pickfile( ) ファイル読み込みのダイアログ呼び出し。読み込むデータをクリックするとfileにデータのアドレスが入る。
img=Read_Tiff(file) 配列imgに自動的にデータが格納される(256色までなのでBYTE型)。
カラー画像の場合、img[3,280,280]となり、赤チャンネルimg[0,280,280]、緑チャンネルimg[1,280,280]、青チャンネルimg[2,280,280]に格納される。
TIFF画像の書き込み
例:img配列に格納されているBYTE [280, 280]のデータを書き込む場合。
file=Dialog_Pickfile( /write ) ファイル書きみ込みのダイアログ呼び出し。書き込む場所に移動し、ファイル名を拡張子まで書く。
Write_tiff, file, img TIFFで書き出し。
( Write_tiff, file, img, /FLOAT ) 浮動小数点データをTIFFで書き出す場合。
( Write_tiff, file, img, /LONG ) ロングワード型のデータをTIFFで書き出す場合。
*カラーでの書き出しはめんどくさいので省く。
生画像データの読み込み
生画像データ読み込みとはすなわち、非圧縮のデータの読み込みを指す。すなわち、TIFFやJPEGなどの独自のフォーマットを持たないデータのことである。
生画像データのほとんどはBSQ、BIL、BIP形式である。ERmapperの画像データ、Idrisiのimg形式のデータ、PhotoshopのRAWなどもこれにあたる。
読み込みの方法は大きく分けてOPENコマンドとRead_binaryコマンドがある。
図のような生画像データを読み込む場合以下の通り。
■OPENコマンドを使う場合■
file=Dialog_Pickfile( ) ファイル読み込みのダイアログ呼び出し。読み込むデータをクリックするとfileにデータのアドレスが入る。
img=Bytarr(280, 280) 格納するデータの配列を用意する。8bitデータなのでBYTE型を宣言。
Openr, lun, file, /get_lun ファイルにアクセスする準備
Readu, lun, img データの読み込み。
Free_lun, lun ファイルアクセスを閉じる。閉じないとファイルがずっと使用中扱いになる。
■Read_binaryコマンドを使う場合■
file=Dialog_Pickfile( ) ファイル読み込みのダイアログ呼び出し。読み込むデータをクリックするとfileにデータのアドレスが入る。
img=Read_binary(file, Data_type=1, Data_dims=[280, 280]) Data_typeに入る数字は、読み込むデータの型によって変わる。Data_dimsには画像の配列を指定してやる。
Data Type
0 Undefined
1 Byte
2 Integer
3 Longword integer
4 Floating point
5 Double-precision floating
6 Complex floating
7 String
8 Structure
9 Double-precision complex
10 Pointer
11 Object reference
12 Unsigned Integer
13 Unsigned Longword Integer
14 64-bit Integer
15 Unsigned 64-bit Integer
生画像データの書き込み
例:img配列に格納されているBYTE [280, 280, 6]のデータを書き込む場合。
上記の配列の場合、出力画像はBSQ形式になる。
file=Dialog_Pickfile( /write ) ファイル書きみ込みのダイアログ呼び出し。書き込む場所に移動し、ファイル名を拡張子まで書く。
OpenW, lun, file, /get_lun ファイルを書き出すための準備。
WriteU, lun, img ファイルの書き出し(BINARY)。
Free_lun, lun ファイルアクセスを閉じる。
PS:基本的にはRead_binaryで読み込んでOpenWで書き出せば万事OKかと。