android tif bitmap,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);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值