0
我使用LibTiff.net裁剪平鋪Tiff的一部分並將其導出爲平鋪Tiff,但是遇到了「無法將平鋪圖像寫入剝離圖像」的問題。雖然「Tiff.open(」 out.tif」,‘W’)進行剝離的形象,如何創建一個平鋪頁TIFF與輸入數據補嗎?使用LibTiff.net創建平鋪Tiff
using (Tiff input = Tiff.Open(@"E:\Sample_04.tif", "r"))
{
int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
int height = input.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
int tileWidth = input.GetField(TiffTag.TILEWIDTH)[0].ToInt();
int tileLentgh = input.GetField(TiffTag.TILELENGTH)[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 config = input.GetField(TiffTag.PLANARCONFIG)[0].ToInt();
int tiles = 0;
int tileSize = input.TileSize();
byte[][] buffer = new byte[tileSize][];
int tileHeightCount = height/tileLentgh;
int tileWidthCount = width/tileWidth;
for (int y = 0; y < tileLentgh*5; y += tileLentgh)
{
for (int x = 0; x < tileWidth*5; x += tileWidth)
{
buffer[tiles] = new byte[tileSize];
input.ReadTile(buffer[tiles], 0, x, y, 0, 0);
tiles++;
}
}
// writing
using (Tiff output = Tiff.Open("out.tif", "w"))
{
output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel);
output.SetField(TiffTag.IMAGEWIDTH, width);
output.SetField(TiffTag.IMAGELENGTH, height);
output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample);
output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0));
output.SetField(TiffTag.PHOTOMETRIC, photo);
output.SetField(TiffTag.PLANARCONFIG, config);
int c = 0;
for (int y = 0; y < tileLentgh*5; y += tileLentgh)
{
for (int x = 0; x < tileWidth*5; x += tileWidth)
{
output.WriteTile(buffer[c], x, y, 0, 0);
c++;
}
}
}
}
System.Diagnostics.Process.Start("555.tif");
}
我沒有C#或LibTiff.net開發者,但我會假設,設置'TiffTag.ROWSPERSTRIP '領域,是什麼使圖像「剝離」。如果你刪除該行,會發生什麼? – haraldK
我在提出問題之前刪除了這一行,沒有發生任何事情。謝謝你的提示。 –
我想問你爲什麼在for循環中將'tileLength'和'tileWidth'與5相乘? (是比指定的大5倍的圖塊?) –