如何加载 *.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