获取TIF中的图片

  //此处修改文件路径
  using (Tiff tif = Tiff.Open(@"c:\1.tif", "r"))
  {
       for (short i = 0; i < tif.NumberOfDirectories(); i++)
       {
            tif.SetDirectory(i);
             // 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();
             value = tif.GetField(TiffTag.XRESOLUTION);
             float dpiX = value[0].ToFloat();
             value = tif.GetField(TiffTag.YRESOLUTION);
             float dpiY = value[0].ToInt();
             // Read the image into the memory buffer
              int[] raster = new int[height * width];
             if (!tif.ReadRGBAImage(width, height, raster))
             {
                   MessageBox.Show("Could not read image");
                    return;
             }

             using (Bitmap bmp = new Bitmap(width, height,PixelFormat.Format24bppRgb))
             {

                 System.Drawing.Rectangle rect = new System.Drawing.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);
                    //设置DPI 
                    bmp.SetResolution(dpiX, dpiY);
                    bmp.UnlockBits(bmpdata);
                    bmp.Save("TiffTo24BitBitmap" + i + ".jpg", ImageFormat.Jpeg);
               }
         }
     }

需要引用BitMiracle.LibTiff.NET.dll 地址BitMiracle,PixelFormat命名控件为System.Drawing.Imaging,Marshal命名空间System.Runtime.InteropServices,该方法是为了解决其他的实现方式在Windows Server 2003下会出现问题。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值