本文整理汇总了C#中BitMiracle.LibTiff.Classic.Tiff类的典型用法代码示例。如果您正苦于以下问题:C# Tiff类的具体用法?C# Tiff怎么用?C# Tiff使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
Tiff类属于BitMiracle.LibTiff.Classic命名空间,在下文中一共展示了Tiff类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ErrorHandler
/// <summary>
/// Handles an error by writing it text to the <see cref="Console.Error"/>.
/// </summary>
/// <param name="tif">An instance of the <see cref="Tiff"/> class. Can be <c>null</c>.</param>
/// <param name="method">The method where an error is detected.</param>
/// <param name="format">A composite format string (see Remarks).</param>
/// <param name="args">An object array that contains zero or more objects to format.</param>
/// <remarks>
/// The <paramref name="format"/> is a composite format string that uses the same format as
/// <see cref="O:System.String.Format"/> method. The <paramref name="method"/> parameter, if
/// not <c>null</c>, is printed before the message; it typically is used to identify the
/// method in which an error is detected.
/// </remarks>
public virtual void ErrorHandler(Tiff tif, string method, string format, params object[] args)
{
TextWriter stderr = Console.Error;
if (method != null)
stderr.Write("{0}: ", method);
stderr.Write(format, args);
stderr.Write("\n");
}
示例2: getNumberofTiffPages
public int getNumberofTiffPages(Tiff image)
{
int pageCount = 0;
do
{
++pageCount;
} while (image.ReadDirectory());
return pageCount;
}
示例3: ErrorHandler
public override void ErrorHandler(Tiff tif, string module, string fmt, params object[] ap)
{
using (TextWriter stdout = Console.Out)
{
if (module != null)
stdout.Write("{0}: ", module);
stdout.Write(fmt, ap);
stdout.Write(".\n");
}
}
示例4: tiffcvt
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);
}
示例5: TagExtender
public void TagExtender(Tiff tif)
{
TiffFieldInfo[] tiffFieldInfo =
{
new TiffFieldInfo(TIFFTAG_ASCIITAG, -1, -1, TiffType.ASCII, FieldBit.Custom, true, false, "MyTag"),
new TiffFieldInfo(TIFFTAG_SHORTTAG, 2, 2, TiffType.SHORT, FieldBit.Custom, false, true, "ShortTag"),
new TiffFieldInfo(TIFFTAG_LONGTAG, 2, 2, TiffType.LONG, FieldBit.Custom, false, true, "LongTag"),
new TiffFieldInfo(TIFFTAG_RATIONALTAG, 2, 2, TiffType.RATIONAL, FieldBit.Custom, false, true, "RationalTag"),
new TiffFieldInfo(TIFFTAG_FLOATTAG, 2, 2, TiffType.FLOAT, FieldBit.Custom, false, true, "FloatTag"),
new TiffFieldInfo(TIFFTAG_DOUBLETAG, 2, 2, TiffType.DOUBLE, FieldBit.Custom, false, true, "DoubleTag"),
new TiffFieldInfo(TIFFTAG_BYTETAG, 2, 2, TiffType.BYTE, FieldBit.Custom, false, true, "ByteTag"),
new TiffFieldInfo(TIFFTAG_IFDTAG, 1, 1, TiffType.IFD, FieldBit.Custom, false, false, "IfdTag"),
};
tif.MergeFieldInfo(tiffFieldInfo, tiffFieldInfo.Length);
if (m_parentExtender != null)
m_parentExtender(tif);
}
示例6: TiffGrid
public TiffGrid(string filename, string NewFileName)
{
ValuesToWrite = new Dictionary<int, Dictionary<int, double>>();
tiff_org = BitMiracle.LibTiff.Classic.Tiff.Open(Path.GetFullPath(filename), "r");
tiff = BitMiracle.LibTiff.Classic.Tiff.Open(Path.GetFullPath(NewFileName), "w");
foreach (TiffTag enu in Enum.GetValues(typeof(TiffTag)))
{
var val = tiff_org.GetField(enu);
if (val != null & enu != TiffTag.EXTRASAMPLES)
tiff.SetField(enu, val[0]);
}
for (int i = 0; i < tiff_org.GetTagListCount(); i++)
{
int k = tiff_org.GetTagListEntry(i);
var ff = tiff_org.FindFieldInfo((TiffTag)k, TiffType.ANY);
tiff.MergeFieldInfo(new TiffFieldInfo[] { ff }, 1);
var val = tiff_org.GetField((TiffTag)tiff_org.GetTagListEntry(i));
tiff.SetField((TiffTag)k, val[0], val[1]);
}
var val2 = tiff_org.GetField((TiffTag)33922)[1].ToDoubleArray();
XOrigin = val2[3];
YOrigin = val2[4]; //Upper basegrid assumes Lower
val2 = tiff_org.GetField((TiffTag)33550)[1].ToDoubleArray();
GridSize = val2[0];
GridSize = val2[1];
NumberOfColumns = tiff_org.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
NumberOfRows = tiff_org.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
//Shift YOrigin to lower left
YOrigin -= GridSize * NumberOfRows;
scanline = new byte[tiff_org.ScanlineSize()];
bits = scanline.Count() / NumberOfColumns;
ScanLineCache = new Dictionary<int, byte[]>();
}
示例7: TiffGrid
public TiffGrid(string FileName)
{
string fname = Path.GetFullPath(FileName);
tiff = Tiff.Open(FileName, "r");
var val = tiff.GetField((TiffTag)33922)[1].ToDoubleArray();
XOrigin = val[3];
YOrigin = val[4]; //Upper basegrid assumes Lower
val = tiff.GetField((TiffTag)33550)[1].ToDoubleArray();
GridSize = val[0];
GridSize = val[1];
NumberOfColumns = tiff.GetField(TiffTag.IMAGEWIDTH)[0].ToInt();
NumberOfRows = tiff.GetField(TiffTag.IMAGELENGTH)[0].ToInt();
scanline = new byte[tiff.ScanlineSize()];
bits = tiff.ScanlineSize() / NumberOfColumns;
ScanLineCache = new Dictionary<int, byte[]>();
}
示例8: PrintTagInfo
private static void PrintTagInfo(Tiff tiff, TiffTag tiffTag)
{
try
{
var field = tiff.GetField(tiffTag);
if (field != null)
{
Console.WriteLine($"{tiffTag}");
for (int i = 0; i < field.Length; i++)
{
Console.WriteLine($" [{i}] {field[i].Value}");
byte[] bytes = field[i].Value as byte[];
if (bytes != null)
{
Console.WriteLine($" Length: {bytes.Length}");
if (bytes.Length % 8 == 0)
{
for (int k = 0; k < bytes.Length / 8; k++)
{
Console.WriteLine($" [{k}] {BitConverter.ToDouble(bytes, k * 8)}");
}
}
try
{
Console.WriteLine($" > {System.Text.Encoding.ASCII.GetString(bytes).Trim()} < ");
}
catch (Exception ex)
{
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"ERROR: {tiffTag}");
}
}
示例9: writeBufferToContigStrips
static bool writeBufferToContigStrips(Tiff outImage, byte[] buffer, int imagelength, int imagewidth, short spp)
{
FieldValue[] result = outImage.GetFieldDefaulted(TiffTag.ROWSPERSTRIP);
int rowsperstrip = result[0].ToInt();
int strip = 0;
int offset = 0;
for (int row = 0; row < imagelength; row += rowsperstrip)
{
int nrows = (row + rowsperstrip > imagelength) ? imagelength - row : rowsperstrip;
int stripsize = outImage.VStripSize(nrows);
if (outImage.WriteEncodedStrip(strip++, buffer, offset, stripsize) < 0)
{
Tiff.Error(outImage.FileName(), "Error, can't write strip {0}", strip - 1);
return false;
}
offset += stripsize;
}
return true;
}
示例10: readSeparateTilesIntoBuffer
bool readSeparateTilesIntoBuffer(Tiff inImage, byte[] buf, int imagelength, int imagewidth, short spp)
{
byte[] tilebuf = new byte[inImage.TileSize()];
FieldValue[] result = inImage.GetField(TiffTag.TILEWIDTH);
int tw = result[0].ToInt();
result = inImage.GetField(TiffTag.TILELENGTH);
int tl = result[0].ToInt();
result = inImage.GetField(TiffTag.BITSPERSAMPLE);
short bps = result[0].ToShort();
Debug.Assert(bps % 8 == 0);
short bytes_per_sample = (short)(bps / 8);
int imagew = inImage.RasterScanlineSize();
int tilew = inImage.TileRowSize();
int iskew = imagew - tilew * spp;
int bufp = 0;
for (int row = 0; row < imagelength; row += tl)
{
int nrow = (row + tl > imagelength) ? imagelength - row : tl;
int colb = 0;
for (int col = 0; col < imagewidth; col += tw)
{
for (short s = 0; s < spp; s++)
{
if (inImage.ReadTile(tilebuf, 0, col, row, 0, s) < 0 && !m_ignore)
{
Tiff.Error(inImage.FileName(), "Error, can't read tile at {0} {1}, sample {2}", col, row, s);
return false;
}
/*
* Tile is clipped horizontally. Calculate
* visible portion and skewing factors.
*/
if (colb + tilew * spp > imagew)
{
int width = imagew - colb;
int oskew = tilew * spp - width;
cpSeparateBufToContigBuf(buf, bufp + colb + s * bytes_per_sample, tilebuf, nrow, width / (spp * bytes_per_sample), oskew + iskew, oskew / spp, spp, bytes_per_sample);
}
else
cpSeparateBufToContigBuf(buf, bufp + colb + s * bytes_per_sample, tilebuf, nrow, tw, iskew, 0, spp, bytes_per_sample);
}
colb += tilew * spp;
}
bufp += imagew * nrow;
}
return true;
}
示例11: cpSeparate2SeparateByRow
/*
* Separate -> separate by row for rows/strip change.
*/
bool cpSeparate2SeparateByRow(Tiff inImage, Tiff outImage, int imagelength, int imagewidth, short spp)
{
byte[] buf = new byte[inImage.ScanlineSize()];
for (short s = 0; s < spp; s++)
{
for (int row = 0; row < imagelength; row++)
{
if (!inImage.ReadScanline(buf, row, s) && !m_ignore)
{
Tiff.Error(inImage.FileName(), "Error, can't read scanline {0}", row);
return false;
}
if (!outImage.WriteScanline(buf, row, s))
{
Tiff.Error(outImage.FileName(), "Error, can't write scanline {0}", row);
return false;
}
}
}
return true;
}
示例12: cpImage
static bool cpImage(Tiff inImage, Tiff outImage, readFunc fin, writeFunc fout, int imagelength, int imagewidth, short spp)
{
bool status = false;
int scanlinesize = inImage.RasterScanlineSize();
int bytes = scanlinesize * imagelength;
/*
* XXX: Check for integer overflow.
*/
if (scanlinesize != 0 && imagelength != 0 && (bytes / imagelength == scanlinesize))
{
byte[] buf = new byte[bytes];
if (fin(inImage, buf, imagelength, imagewidth, spp))
status = fout(outImage, buf, imagelength, imagewidth, spp);
}
else
{
Tiff.Error(inImage.FileName(), "Error, no space for image buffer");
}
return status;
}
示例13: cpBiasedContig2Contig
/*
* Contig -> contig by scanline while subtracting a bias image.
*/
bool cpBiasedContig2Contig(Tiff inImage, Tiff outImage, int imagelength, int imagewidth, short spp)
{
if (spp == 1)
{
int biasSize = m_bias.ScanlineSize();
int bufSize = inImage.ScanlineSize();
FieldValue[] result = m_bias.GetField(TiffTag.IMAGEWIDTH);
int biasWidth = result[0].ToInt();
result = m_bias.GetField(TiffTag.IMAGELENGTH);
int biasLength = result[0].ToInt();
if (biasSize == bufSize && imagelength == biasLength && imagewidth == biasWidth)
{
result = inImage.GetField(TiffTag.BITSPERSAMPLE);
short sampleBits = result[0].ToShort();
if (sampleBits == 8 || sampleBits == 16 || sampleBits == 32)
{
byte[] buf = new byte[bufSize];
byte[] biasBuf = new byte[bufSize];
for (int row = 0; row < imagelength; row++)
{
if (!inImage.ReadScanline(buf, row, 0) && !m_ignore)
{
Tiff.Error(inImage.FileName(), "Error, can't read scanline {0}", row);
return false;
}
if (!m_bias.ReadScanline(biasBuf, row, 0) && !m_ignore)
{
Tiff.Error(inImage.FileName(), "Error, can't read biased scanline {0}", row);
return false;
}
if (sampleBits == 8)
subtract8(buf, biasBuf, imagewidth);
else if (sampleBits == 16)
subtract16(buf, biasBuf, imagewidth);
else if (sampleBits == 32)
subtract32(buf, biasBuf, imagewidth);
if (!outImage.WriteScanline(buf, row, 0))
{
Tiff.Error(outImage.FileName(), "Error, can't write scanline {0}", row);
return false;
}
}
m_bias.SetDirectory(m_bias.CurrentDirectory()); /* rewind */
return true;
}
else
{
Tiff.Error(inImage.FileName(), "No support for biasing {0} bit pixels\n", sampleBits);
return false;
}
}
Tiff.Error(inImage.FileName(), "Bias image {0},{1}\nis not the same size as {2},{3}\n",
m_bias.FileName(), m_bias.CurrentDirectory(), inImage.FileName(), inImage.CurrentDirectory());
return false;
}
else
{
Tiff.Error(inImage.FileName(), "Can't bias {0},{1} as it has >1 Sample/Pixel\n",
inImage.FileName(), inImage.CurrentDirectory());
return false;
}
}
示例14: Copy
public bool Copy(Tiff inImage, Tiff outImage)
{
int width = 0;
FieldValue[] result = inImage.GetField(TiffTag.IMAGEWIDTH);
if (result != null)
{
width = result[0].ToInt();
outImage.SetField(TiffTag.IMAGEWIDTH, width);
}
int length = 0;
result = inImage.GetField(TiffTag.IMAGELENGTH);
if (result != null)
{
length = result[0].ToInt();
outImage.SetField(TiffTag.IMAGELENGTH, length);
}
short bitspersample = 1;
result = inImage.GetField(TiffTag.BITSPERSAMPLE);
if (result != null)
{
bitspersample = result[0].ToShort();
outImage.SetField(TiffTag.BITSPERSAMPLE, bitspersample);
}
short samplesperpixel = 1;
result = inImage.GetField(TiffTag.SAMPLESPERPIXEL);
if (result != null)
{
samplesperpixel = result[0].ToShort();
outImage.SetField(TiffTag.SAMPLESPERPIXEL, samplesperpixel);
}
if (m_compression != (Compression)(-1))
outImage.SetField(TiffTag.COMPRESSION, m_compression);
else
{
result = inImage.GetField(TiffTag.COMPRESSION);
if (result != null)
{
m_compression = (Compression)result[0].ToInt();
outImage.SetField(TiffTag.COMPRESSION, m_compression);
}
}
result = inImage.GetFieldDefaulted(TiffTag.COMPRESSION);
Compression input_compression = (Compression)result[0].ToInt();
result = inImage.GetFieldDefaulted(TiffTag.PHOTOMETRIC);
Photometric input_photometric = (Photometric)result[0].ToShort();
if (input_compression == Compression.JPEG)
{
/* Force conversion to RGB */
inImage.SetField(TiffTag.JPEGCOLORMODE, JpegColorMode.RGB);
}
else if (input_photometric == Photometric.YCBCR)
{
/* Otherwise, can't handle subsampled input */
result = inImage.GetFieldDefaulted(TiffTag.YCBCRSUBSAMPLING);
short subsamplinghor = result[0].ToShort();
short subsamplingver = result[1].ToShort();
if (subsamplinghor != 1 || subsamplingver != 1)
{
Console.Error.WriteLine("tiffcp: {0}: Can't copy/convert subsampled image.", inImage.FileName());
return false;
}
}
if (m_compression == Compression.JPEG)
{
if (input_photometric == Photometric.RGB && m_jpegcolormode == JpegColorMode.RGB)
outImage.SetField(TiffTag.PHOTOMETRIC, Photometric.YCBCR);
else
outImage.SetField(TiffTag.PHOTOMETRIC, input_photometric);
}
else if (m_compression == Compression.SGILOG || m_compression == Compression.SGILOG24)
{
outImage.SetField(TiffTag.PHOTOMETRIC, samplesperpixel == 1 ? Photometric.LOGL : Photometric.LOGLUV);
}
else
{
if (input_compression != Compression.JPEG)
copyTag(inImage, outImage, TiffTag.PHOTOMETRIC, 1, TiffType.SHORT);
}
if (m_fillorder != 0)
outImage.SetField(TiffTag.FILLORDER, m_fillorder);
else
copyTag(inImage, outImage, TiffTag.FILLORDER, 1, TiffType.SHORT);
/*
* Will copy `Orientation' tag from input image
*/
result = inImage.GetFieldDefaulted(TiffTag.ORIENTATION);
m_orientation = (Orientation)result[0].ToByte();
switch (m_orientation)
{
//.........这里部分代码省略.........
示例15: writeBufferToSeparateTiles
bool writeBufferToSeparateTiles(Tiff outImage, byte[] buf, int imagelength, int imagewidth, short spp)
{
byte[] obuf = new byte[outImage.TileSize()];
FieldValue[] result = outImage.GetField(TiffTag.TILELENGTH);
int tl = result[0].ToInt();
result = outImage.GetField(TiffTag.TILEWIDTH);
int tw = result[0].ToInt();
result = outImage.GetField(TiffTag.BITSPERSAMPLE);
short bps = result[0].ToShort();
Debug.Assert(bps % 8 == 0);
short bytes_per_sample = (short)(bps / 8);
int imagew = outImage.ScanlineSize();
int tilew = outImage.TileRowSize();
int iimagew = outImage.RasterScanlineSize();
int iskew = iimagew - tilew * spp;
int bufp = 0;
for (int row = 0; row < imagelength; row += tl)
{
int nrow = (row + tl > imagelength) ? imagelength - row : tl;
int colb = 0;
for (int col = 0; col < imagewidth; col += tw)
{
for (short s = 0; s < spp; s++)
{
/*
* Tile is clipped horizontally. Calculate
* visible portion and skewing factors.
*/
if (colb + tilew > imagew)
{
int width = imagew - colb;
int oskew = tilew - width;
cpContigBufToSeparateBuf(obuf, buf, bufp + (colb * spp) + s, nrow, width / bytes_per_sample, oskew, (oskew * spp) + iskew, spp, bytes_per_sample);
}
else
cpContigBufToSeparateBuf(obuf, buf, bufp + (colb * spp) + s, nrow, m_tilewidth, 0, iskew, spp, bytes_per_sample);
if (outImage.WriteTile(obuf, col, row, 0, s) < 0)
{
Tiff.Error(outImage.FileName(), "Error, can't write tile at {0} {1} sample {2}", col, row, s);
return false;
}
}
colb += tilew;
}
bufp += nrow * iimagew;
}
return true;
}