*.tif イメージをメモリにロードせずに、その一部をロードする方法。
大きな TIFF ファイルを扱う必要があります。(> 4 GB)。を使用してこのファイルを読み取ろうとし、バイトを画像に変換するためにBinaryReader
使用しました。BitMiracle.LibTiff.Classic
しかし、TIFF ファイルで特定のピクセルを読み取る方法の例は見つかりませんでした。
たぶん、このタスクの解決策があるかもしれません。
BigScan.tif
ファイルがあり、常に次のようになっているとしましょう。
Image Compression - NONE
Pixel Order - Interleaved (RGBRGB)
Byte Order - IBM PC
私はいくつかの変数を持っています:
ImagePart with User Defined Width
ImagePart with User Define Height
ImagePArt with User Defined Location
問題は、どうやってImagePart
から取得できるBigScan.tif
かということです。
ただし、(x,y) 座標を使用して "BigScan.tif" のピクセルの情報を読み取る機能があれば最適です。
BigScan.tif
そのような関数を使用して、指定された場所からピクセルを読み取る必要があります。
public Color GetPixelColorFromTiffImage(string TiffFileName, int PixelPositionX, int PixelPositionY)
{
//Some Code
return returnedColor;
}
非常に奇妙ですが、サポートは私の疑問を解決しませんでした. 誰か知ってるかも。BitMiracle Samplesのコードのこの部分が、「-11512229」、「-11838376」などの「ラスター」配列番号に書き込まれたのはなぜですか。
using (Tiff image = Tiff.Open(fullImageLocation, "r"))
{
// Find the width and height of the image
FieldValue[] value = image.GetField(TiffTag.IMAGEWIDTH);
width = value[0].ToInt();
value = image.GetField(TiffTag.IMAGELENGTH);
height = value[0].ToInt();
int imageSize = height * width;
int[] raster = new int[imageSize];
// Read the image into the memory buffer
if (!image.ReadRGBAImage(width, height, raster))
{
MessageBox.Show("Could not read image");
}
using (Bitmap btm = new Bitmap(200, 200))
{
for (int i = 0; i < btm.Width; ++i)
for (int j = 0; j < btm.Height; ++j)
btm.SetPixel(i, j, getSample(i + 330, j + 30, raster, width, height));
ReternedBitmap = btm;
}
}//using