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
¥335
(2024/11/10 19:15:40時点 楽天市場調べ-詳細)
created by Rinker
¥3,960
(2024/11/10 19:15:40時点 楽天市場調べ-詳細)
created by Rinker
¥3,630
(2024/11/11 13:11:42時点 楽天市場調べ-詳細)
Comments