C#とLibTiff.Netを使って8bitグレースケールsingle TIFFを読み込みます。
基本的に以前に作成したCのプログラムと同じ内容です。
WindowsとLinuxの両方でコンパイル出来ます。
INDEX
環境・コンパイルなど
「C#とlibtiff.netの環境構築」の記事を参照。
ソース
「8bit.tif」は、自前で準備するか、以前の記事のソースを使って作成する。
using System;
using System.Diagnostics;
using BitMiracle.LibTiff.Classic;
//namespace LibTiffSamples
//{
public static class Read8BitTiff
{
// main
static void Main(string[] args)
{
Console.WriteLine("Read 8bit Tiff file.");
// 方法1 static
// readTiff.readTiffFile();
// 方法2
readTiff t = new readTiff();
t.readTiffFile();
}
} // end of Read8BitTiff class
//} // end of namespace
public class readTiff
{
// read TIFF
// public static void readTiffFile() // 方法1
public void readTiffFile() // 方法2
{
int i, j, width, height;
ushort samplesperpixel, bitspersample;
double resolution_x, resolution_y;
string fileName = "8bit.tif";
using (Tiff tif = Tiff.Open(fileName, "r"))
{
if (tif == null)
{
Console.WriteLine("Can not read Tiff file.");
return;
}
width = tif.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
height = tif.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
resolution_x = tif.GetField(TiffTag.XRESOLUTION)[0].ToDouble();
resolution_y = tif.GetField(TiffTag.YRESOLUTION)[0].ToDouble();
bitspersample = tif.GetField(TiffTag.BITSPERSAMPLE)[0].ToUShort();
samplesperpixel = tif.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToUShort();
Console.WriteLine( width );
Console.WriteLine( height );
Console.WriteLine( resolution_x );
Console.WriteLine( resolution_y );
Console.WriteLine( bitspersample );
Console.WriteLine( samplesperpixel );
// 画像データの確保
byte[] image = new byte[width * height];
// 1ラインのデータ配列
byte[] scanline = new byte[height * width];
// 読み取ったデータを格納
for( i = 0; i < height; i++ )
{
tif.ReadScanline(scanline, i);
for( j = 0; j < width; j++ )
{
image[width * i + j] = scanline[j];
// Console.WriteLine( scanline[j] );
}
}
// 確認
using (Tiff output = Tiff.Open("8bit-confirm.tif", "w"))
{
if (output == null)
{
Console.WriteLine("Can not create Tiff file.");
return;
}
output.SetField(TiffTag.IMAGEWIDTH, width);
output.SetField(TiffTag.IMAGELENGTH, height);
output.SetField(TiffTag.SAMPLESPERPIXEL, samplesperpixel);
output.SetField(TiffTag.BITSPERSAMPLE, bitspersample);
output.SetField(TiffTag.ORIENTATION, Orientation.TOPLEFT);
// output.SetField(TiffTag.ROWSPERSTRIP, height);
output.SetField(TiffTag.XRESOLUTION, resolution_x);
output.SetField(TiffTag.YRESOLUTION, resolution_y);
output.SetField(TiffTag.RESOLUTIONUNIT, ResUnit.INCH);
output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
output.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK);
output.SetField(TiffTag.COMPRESSION, Compression.NONE);
output.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB);
// まとめて書き込み
byte[] buf = new byte[image.Length * sizeof(byte)];
Buffer.BlockCopy(image, 0, buf, 0, buf.Length);
output.WriteEncodedStrip(0, buf, buf.Length);
}
}
// 画像表示
//System.Diagnostics.Process.Start(fileName);
}
}
//} // end of namespace
created by Rinker
¥295
(2026/01/09 18:34:18時点 楽天市場調べ-詳細)
created by Rinker
¥3,960
(2026/01/09 18:34:18時点 楽天市場調べ-詳細)
created by Rinker
¥3,630
(2026/01/09 23:54:03時点 楽天市場調べ-詳細)


Comments