Como se mencionó Bobrovsky debe comprobar si su imagen de archivo es de baldosas o no. A continuación, presenté el código de fragmento para leer un tiff de flujo y recortar la parte superior izquierda de la imagen.
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");
Para otras partes de la imagen, puede cambiar el rango de "i" en el ciclo.
Oh, Señor, eso es 40 * gigabytes *. ¿Supongo que solo tienes un sistema operativo de 32 bits para hacerlo más desafiante? –
Estoy ejecutando hardware de 64 bits, pero la lectura desde el disco será la forma ideal de procesarlo. Estoy profundizando en LibTiff.Net que tiene funciones para leer scanline, que puede ser lo que necesito – JWood
¿El color de la imagen es escala de grises o binivel? Para binivel tengo una solución de código nativo que puede resolver el problema de memoria. Envíame un correo electrónico ([email protected]). – BitBank