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处理方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MAC 添加路由(Route)
- 下一篇: java.util.Scanner简单介