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处理方法相关推荐
- [M]MagicTable转换异常解决方法
[M]MagicTable转换异常解决方法 参考文章: (1)[M]MagicTable转换异常解决方法 (2)https://www.cnblogs.com/yiyun/p/5259384.html ...
- SQL语句行列转换两种方法 case ...when 和pivot函数应用
2019独角兽企业重金招聘Python工程师标准>>> SQL语句行列转换两种方法 case ...when 和pivot函数应用SQL语句行列转换两种方法 case ...when ...
- java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)
java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...
- python代码转换为pytorch_python基础教程Pytorch之Tensor和Numpy之间的转换的实现方法...
为什么要相互转换: 1. 要对tensor进行操作,需要先启动一个Session,否则,我们无法对一个tensor比如一个tensor常量重新赋值或是做一些判断操作,所以如果将它转化为numpy数组就 ...
- php将abc转换成整形是什么意思,php强制转换类型的方法
php强制转换类型的方法 发布时间:2020-07-02 15:45:14 来源:亿速云 阅读:102 作者:Leah 本篇文章为大家展示了php强制转换类型的方法,代码简明扼要并且容易理解,绝对能使 ...
- arcpy投影(三)——定义投影、地理变换关系自定义和投影变换Project_managemen(含基准面/椭球体转换参数使用方法,arcpro/arcmap)
arcpy投影这一个专题从文件位置.文件含义.空间参照获取.转换关系查询.投影定义.自定义转换关系.投影变换这几个角度上系统的进行了介绍,整理出了: arcpy投影(一)--prj.gtf文件定义.路 ...
- vdi转vmdk VirtualBox与VMware硬盘格式转换及使用方法
vdi转vmdk Virtual Box与VMware硬盘格式转换及使用方法 一.找到对应文件位置 1.首先找到需要转换的vdi文件位置 2.找到VirtualBox里VBoxManage.exe的位 ...
- golang string转int8_Go教程:23 string转换int类型方法对比
Go教程:23 string转换int类型方法对比 Go语言时一个强类型的语言,但是强类型的语言有也强类型的语言的烦恼.这个烦恼就是类型转换, 接下来我们就讲解一下怎么把 string 类型变量转换成 ...
- 腾讯视频QLV格式转换mp4的方法
腾讯视频QLV格式转换mp4的方法不知道大家知不知道用?喜欢用腾讯视频的朋友应该都知道腾讯视频单独搞出了个QLV格式文件,只能用腾讯独有的腾讯视频软件才能播放,就算用格式工厂转换也不行,那么腾讯视频的 ...
最新文章
- 基于Dijkstra算法的武汉地铁路径规划!
- 把热带雨林搬进办公室!这样的互联网公司!我愿意加班至死!
- 多态时:成员特点,成员变量
- 计算机网络知识点1——计算机网络概述
- Spring 2.5中文版手册
- python 列联表自动拆分_python自动化办公:实现按照一列内容拆分excel
- .net数据库连接池配置技巧(默认值)
- es6 迭代器对象的 return(),throw()
- SqlServer两表之间:根据一个表的字段更新另一个表的字段
- centos7 安装 openssl和openssl升级
- 易基因|3文读懂:m6A甲基化在动物肌肉发育中的重要作用(猪+鸡+山羊)
- vue仿163musicPC端
- 运维的升级打怪之路v2版
- 硕士论文各章节的篇幅多少比较合适
- spring如何注入作用域不同的bean
- 工作阶段总结记录20221020
- JAVA实现100以内偶数和,奇数和,奇偶和
- wps表单小程序 服务器错误,微信小程序WPS表单怎么在钉钉使用
- BUAA全排列数的生成
- 即时通讯中语音视频聊天后面的技术支持有哪些