0
GIF 압축을 사용하는 동안 TIFF 파일을 열어서 새 파일로 복사하면됩니다.Silverlight에서 LibTiff.Net을 사용하여 TIFF를 다시 꾸며보기
그래서 LibTiff.Net 및 TiffCP 유틸리티를 사용했습니다. TIffCP의 코드를 변환하는 데 최선을 다했는데 여기에있는 기능은 다음과 같습니다.
public static byte[] ConvertToG4Tiff(byte[] input)
{
var c = new Copier();
// Set compression to g4
if (!c.ProcessCompressOptions("g4")) return null;
// Open output tiff
var memoryStream = new MemoryStream();
var tiffStream = new TiffStream();
using (var outImage = Tiff.ClientOpen(string.Empty, "w", memoryStream, tiffStream))
{
using (var inImage = Tiff.ClientOpen(string.Empty, "read", new MemoryStream(input), new TiffStream()))
{
if (inImage == null) return null;
int totalPages = inImage.NumberOfDirectories();
for (var i = 0; i < totalPages;)
{
c.m_config = PlanarConfig.UNKNOWN;
c.m_compression = c.m_defcompression;
c.m_predictor = c.m_defpredictor;
c.m_fillorder = 0;
c.m_rowsperstrip = 0;
c.m_tilewidth = -1;
c.m_tilelength = -1;
c.m_g3opts = c.m_defg3opts;
if (!inImage.SetDirectory((short)i)) return null;
if (!c.Copy(inImage, outImage) || !outImage.WriteDirectory()) return null;
i++;
}
}
var retVal = new byte[tiffStream.Size(memoryStream)];
tiffStream.Read(memoryStream, retVal, 0, retVal.Length);
return retVal;
}
}
나는 마지막 3 줄이 엉망인 곳이라고 생각합니다. 유효한 바이트 배열을 다시 얻습니다 (데이터가 있으며 원래의 비 압축 TIFF의 약 10 %입니다)
코드를 다시 열려고하면 열리지 않습니다. 이 새로운 배열을이 동일한 함수를 통해 전달하면 작동하지 않습니다. 열린 오브젝트가 NULL입니다.
내가 뭘 잘못 했니?
예, 변경 코드는 작동합니다! 내가 올바른 출력을 가지고 있는지 테스트하기 위해 동일한 코드에 압축 된 데이터를 전달하고 있었는데, 이것은 최종 코드가 아닙니다. 변환 주석을 주셔서 감사합니다. TIFF 사양을 더 자세히 파고들 필요가 있지만 괜찮을 것이라고 생각합니다. 나는 거대한 문서 기반을 가지고 있으며 압축되지 않은 스캔을 고객과 함께하고 있습니다 ... 이것은 내가 테스트하고있는 것입니다. – katit