サポート

Image-Pro
  操作手順書

サポートImage-Pro plus 操作手順書ファイルフォーマット仕様

アウトライン・ファイル(拡張子が".OUT"のファイル)

アウトライン・ファイルとは、"Count/Size"(カウント/サイズ) コマンドや"Measurements"(マニュアル測定) コマンドを使ってオブジェクトのアウトラインを保存するときに作成されるファイルです。アウトライン・ファイルはバイナリ・ファイルで、中には多角形のデータのリストが入っています。このファイルは全て2バイトの整数で構成されています。

最初の2バイト整数は、ファイルに入っている多角形の総数を定義します。その後に多角形の定義が続きます。1つの多角形のデータは、その多角形の頂点の数を定義する2バイトの整数と、それに続く、そのそれぞれの頂点のXY座標値から成っています。各XY座標値はそれぞれ2バイトの整数2つから成っていて、最初の2バイトはX座標を、次の2バイトはY座標を定義します。

次の表は、2つの多角形(頂点が3つのものが1つ、頂点が4つのものが1つ)を記録したファイルの構造と内容を示したものです。

 

16ビット整数

2バイト整数の内容

バイナリ表記と

10進法表記

 

説明

#1

00000000 00000010

(2)

ファイルに2つの多角形が入っていることを示す

#2

00000000 00000011

(3)

多角形1の頂点が3つあることを示す

#3 & 4

00000000 00001010

(10)

00000000 00010100

(20)

多角形1の第1頂点のXY座標(10,20)を定義する

#5 & 6

00000000 00001010

(10)

00000000 00101000

(40)

多角形1の第2頂点のXY座標(10,40)を定義する

#7 & 8

00000000 01000110 (70)

00000000 00101000 (40)

多角形1の第3頂点のXY座標(70,40)を定義する

#9

00000000 00000100

(4)

多角形2の頂点が4つあることを示す

#10 & 11

00000000 01100100

(100)

00000000 01000000

(64)

多角形2の第1頂点のXY座標(100,64)を定義する

#12 & 13

00000000 01100100

(100)

00000000 10010110

(150)

多角形2の第2頂点のXY座標(100,150)を定義する

#14 & 15

00000000 01111000

(120)

00000000 10010110

(150)

多角形2の第3頂点のXY座標(120,150)を定義する

#16 & 17

00000000 01111000

(120)

00000000 01000000

(64)

多角形2の第4頂点のXY座標(120,64)を定義する

 

次の例は、C言語のプログラム内でアウトライン・ファイルにアクセスし、それを使用する方法を示しています。

typedef struct{int x; int y} COORD;
#define MAXPOINTS 4000

int
LoadOutlines(char *outfile)
{
int i;
int count;
int num_obj = 0;
COORD *Points;
FILE *fp;
/* open outline file */
if((fp = fopen(outline, "rb"))==NULL)
return -1;
/* allocate space for polygon */
if((Points=malloc((long)MAXPOINTS*sizeof(COORD)))==
NULL)
return -1;
/* reads in number of polygons */
fread((char *) &num_obj, sizeof(int),1,fp);
if(num_obj <=0)
return -1;
/* for each polygon...*/
for(i = 0; i< num_obj; i++){
/* reads in number of points in polygon */
fread ((char *)&count,sizeof(int),1,fp);
if(count > MAXPOINTS || count < 0)
break;
/* read points*/
if(fread((char*)Points,sizeof(COORD),count,fp)
==count{

.多角形の処理を行なう.

}
else
break;
}
free(Points);
fclose(fp);
return 0;
}