画像データの読む込み/書き込み

基本的に以下のコマンドを知っていれば、画像データの読み込み/書き込みには事足りる。

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かと。