65.9K
CodeProject 正在变化。 阅读更多。
Home

简单的TIFF管理类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.73/5 (35投票s)

2004年12月15日

viewsIcon

255696

downloadIcon

7413

使用GDI+解析TIFF文件。

引言

与传统的GDI相比,.NET框架自带的GDI+功能更强大。本文描述了一个非常简单的类,用于解析多页TIFF文件。操作包括拆分、合并和转换TIFF压缩编码器。

使用代码

对于那些玩转传真或OCR软件的人来说,您可能会对各种TIFF编码器格式感到厌倦。GDI+提供的EncoderValue包含适用于图像的大多数压缩编码器信息。默认情况下,使用Image.Save()保存的图像使用LZW编码器,而市场上大多数传真软件使用CCITT标准。因此,在处理TIFF图像时,您应该仔细考虑。TiffManager中的几乎所有方法都提供了一个编码器参数来处理编码部分。

/// <summary>
/// This function will output the image
/// to a TIFF file with specific compression format
/// </summary>
/// <param name="outPutDirectory">
///     The splited images' directory</param>
/// <param name="format">The codec for compressing</param>
/// <returns>splited file name array list</returns>
public ArrayList SplitTiffImage(string outPutDirectory,EncoderValue format)
{
  string fileStartString = outPutDirectory + "\\" + 
                           GetFileNameStartString(_ImageFileName);
  ArrayList splitedFileNames=new ArrayList();
  try
  {
    Guid objGuid=image.FrameDimensionsList[0];
    FrameDimension objDimension=new FrameDimension(objGuid);

    //Saves every frame as a separate file.
    Encoder enc=Encoder.Compression;
    int curFrame=0;
    for (int i=0;i<_PageNumber;i++)
    {
      image.SelectActiveFrame(objDimension,curFrame);
      EncoderParameters ep=new EncoderParameters(1);
      ep.Param[0]=new EncoderParameter(enc,(long)format);
      ImageCodecInfo info=GetEncoderInfo("image/tiff");

      //Save the master bitmap
      string fileName=string.Format("{0}{1}.TIF", 
             fileStartString, i.ToString());
      image.Save(fileName,info,ep);
      splitedFileNames.Add(fileName);
      curFrame++;
    }
  }
  catch (Exception)
  {
    throw;
  }

  return splitedFileNames;
}

TiffManager的各种签名如下

public void ConvertTiffFormat(string strNewImageFileName, 
                              EncoderValue compressEncoder);
public Image GetSpecificPage(int pageNumber);
public void JoinTiffImages(string[] imageFiles, string outFile, 
                           EncoderValue compressEncoder);
public void RemoveAPage(int pageNumber, EncoderValue compressEncoder, 
                        string strFileName);
public ArrayList SplitTiffImage(string outPutDirectory, EncoderValue format);

关注点

这确实是一个简单的TIFF处理类。您可以更深入地研究,例如实现分辨率转换等。

历史

  • 2004年12月15日。
© . All rights reserved.