Như Bobrovsky đề cập, bạn nên kiểm tra xem hình ảnh tập tin của bạn được lát gạch hay không. Trong phần tiếp theo, tôi đã trình bày đoạn mã để đọc một luồng tiff và cắt phần trên bên trái của hình ảnh.
using (Tiff input = Tiff.Open(@"imageFile.tif", "r"))
{
// get properties to use in writing output image file
int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
int height = input.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
int samplesPerPixel = input.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToInt();
int bitsPerSample = input.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt();
int photo = input.GetField(TiffTag.PHOTOMETRIC)[0].ToInt();
int scanlineSize = input.ScanlineSize();
byte[][] buffer = new byte[height][];
for (int i = 0; i < height; ++i)
{
buffer[i] = new byte[scanlineSize];
input.ReadScanline(buffer[i], i);
}
using (Tiff output = Tiff.Open("splitedImage.tif", "w"))
{
output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel);
output.SetField(TiffTag.IMAGEWIDTH, width/2);
output.SetField(TiffTag.IMAGELENGTH, height/2);
output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample);
output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0));
output.SetField(TiffTag.PHOTOMETRIC, photo);
output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
int c = 0;
byte[][] holder = new byte[height][];
for (int i = height/2; i < height; i++)
//for (int j = 0; j < height/2 ; j++)
{
holder[i] = buffer[i].Skip(buffer[i].Length/2).ToArray();
output.WriteScanline(holder[i], c);
c++;
}
}
}
System.Diagnostics.Process.Start("splitedImage.tif");
Đối với các phần khác của hình ảnh, bạn có thể thay đổi phạm vi "i" trong vòng lặp.
Nguồn
2017-04-17 12:18:28
Chúa ơi, đó là 40 * gigabyte *. Tôi cho rằng bạn chỉ có một hệ điều hành 32-bit để làm cho nó thêm khó khăn? –
Tôi đang chạy trên phần cứng 64 bit nhưng đọc từ đĩa sẽ là cách lý tưởng để xử lý nó. Tôi đang nhìn sâu hơn vào LibTiff.Net có chức năng đọc scanline mà có thể là những gì tôi cần – JWood
Là hình ảnh màu sắc, màu xám hoặc bilevel? Đối với bilevel tôi có một giải pháp mã nguồn gốc có thể giải quyết vấn đề bộ nhớ. Gửi email cho tôi ([email protected]). – BitBank