public tiffcvt ( |
||
inImage | ||
outImage | ||
Результат | bool |
public bool tiffcvt(Tiff inImage, Tiff outImage)
{
FieldValue[] result = inImage.GetField(TiffTag.IMAGEWIDTH);
if (result == null)
return false;
int width = result[0].ToInt();
result = inImage.GetField(TiffTag.IMAGELENGTH);
if (result == null)
return false;
int height = result[0].ToInt();
copyField(inImage, outImage, TiffTag.SUBFILETYPE);
outImage.SetField(TiffTag.IMAGEWIDTH, width);
outImage.SetField(TiffTag.IMAGELENGTH, height);
outImage.SetField(TiffTag.BITSPERSAMPLE, 8);
outImage.SetField(TiffTag.COMPRESSION, m_compression);
outImage.SetField(TiffTag.PHOTOMETRIC, Photometric.RGB);
copyField(inImage, outImage, TiffTag.FILLORDER);
outImage.SetField(TiffTag.ORIENTATION, Orientation.TOPLEFT);
if (m_noAlpha)
outImage.SetField(TiffTag.SAMPLESPERPIXEL, 3);
else
outImage.SetField(TiffTag.SAMPLESPERPIXEL, 4);
if (!m_noAlpha)
{
short[] v = new short[1];
v[0] = (short)ExtraSample.ASSOCALPHA;
outImage.SetField(TiffTag.EXTRASAMPLES, 1, v);
}
copyField(inImage, outImage, TiffTag.XRESOLUTION);
copyField(inImage, outImage, TiffTag.YRESOLUTION);
copyField(inImage, outImage, TiffTag.RESOLUTIONUNIT);
outImage.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
if (!m_testFriendly)
outImage.SetField(TiffTag.SOFTWARE, Tiff.GetVersion());
copyField(inImage, outImage, TiffTag.DOCUMENTNAME);
if (m_processByBlock && inImage.IsTiled())
return cvt_by_tile(inImage, outImage, width, height);
else if (m_processByBlock)
return cvt_by_strip(inImage, outImage, width, height);
return cvt_whole_image(inImage, outImage, width, height);
}
public static void Main(string[] args) { Converter c = new Converter(); c.m_testFriendly = g_testFriendly; int argn = 0; for (; argn < args.Length; argn++) { string arg = args[argn]; if (arg[0] != '-') break; string optarg = null; if (argn < (args.Length - 1)) optarg = args[argn + 1]; arg = arg.Substring(1); switch (arg[0]) { case 'b': c.m_processByBlock = true; break; case 'c': if (optarg == "none") c.m_compression = Compression.NONE; else if (optarg == "packbits") c.m_compression = Compression.PACKBITS; else if (optarg == "lzw") c.m_compression = Compression.LZW; else if (optarg == "jpeg") c.m_compression = Compression.JPEG; else if (optarg == "zip") c.m_compression = Compression.DEFLATE; else { usage(); return; } argn++; break; case 'r': case 't': c.m_rowsPerStrip = int.Parse(optarg, CultureInfo.InvariantCulture); argn++; break; case 'n': c.m_noAlpha = true; break; case '?': usage(); return; } } if (args.Length - argn < 2) { usage(); return; } using (Tiff outImage = Tiff.Open(args[args.Length - 1], "w")) { if (outImage == null) return; for (; argn < args.Length - 1; argn++) { using (Tiff inImage = Tiff.Open(args[argn], "r")) { if (inImage == null) return; do { if (!c.tiffcvt(inImage, outImage) || !outImage.WriteDirectory()) return; } while (inImage.ReadDirectory()); } } } }