获取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下会出现问题。


你可能感兴趣的:(windows,image,buffer,float,byte,tiff)