Tiff转换Bitmap处理方法

首先项目中引入BitMiracle.LibTiff.NET的dll

命名空间:

using BitMiracle.LibTiff.Classic;
using System.Runtime.InteropServices;
using System.Windows.Forms;

 

private static Bitmap TiffToBitmap(string asTiffFile)
  {
   Bitmap bmp = null;
   try
   {
    bmp = (Bitmap)Bitmap.FromFile(asTiffFile);
    return bmp;
   }
   catch
   {
   }
   Tiff tif = Tiff.Open(asTiffFile, "r");
   if (tif == null)
   {
    return null;
   }
   // Find the width and height of the image
   FieldValue[] value = tif.GetField(TiffTag.IMAGEWIDTH);
   int width = value[0].ToInt();

   value = tif.GetField(TiffTag.IMAGELENGTH);
   int height = value[0].ToInt();

   // Read the image into the memory buffer
   int[] raster = new int[height * width];

   if (!tif.ReadRGBAImage(width, height, raster))
   {
    tif.Close();
    tif.Dispose();
    return null;
   }
   tif.Close();
   tif.Dispose();
   // bitmap作成
   bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
   Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
   BitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
   byte[] bits = new byte[bmpdata.Stride * bmpdata.Height];

   for (int y = 0; y < bmp.Height; y++)
   {
    int rasterOffset = y * bmp.Width;
    int bitsOffset = (bmp.Height - y - 1) * bmpdata.Stride;

    for (int x = 0; x < bmp.Width; x++)
    {
     int rgba = raster[rasterOffset++];
     bits[bitsOffset++] = (byte)((rgba >> 16) & 0xff);
     bits[bitsOffset++] = (byte)((rgba >> 8) & 0xff);
     bits[bitsOffset++] = (byte)(rgba & 0xff);
    }
   }
   Marshal.Copy(bits, 0, bmpdata.Scan0, bits.Length);
   bmp.UnlockBits(bmpdata);
   return bmp;
  }

使用方法:

Bitmap oBmp = TiffToBitmap(asFileName);

你可能感兴趣的:(Tiff转换Bitmap处理方法)