GIS笔记_普通tif文件转成array数组 c#
引用的库文件:
using System;
using System.Collections;using System.Windows.Media.Imaging;
using System.Drawing;
using System.Drawing.Imaging;
主要功能函数 :
public static System.Array TifToArray(string tifPath)
{//tif -> bitmapImage tifImage = Image.FromFile(tifPath);Bitmap bitmap = new Bitmap(tifImage);int height = (int)bitmap.Height;int width = (int)bitmap.Width;System.Array pixelsArray = Array.CreateInstance(typeof(float), height, width);GrayBitmapData grayBitmapdata = new GrayBitmapData(bitmap);byte[,] bitData = null;bitData = grayBitmapdata.GetData();for (int i = 0; i < height; i++){for (int j = 0; j < width; j++){int[] indices = { i, j };pixelsArray.SetValue(bitData[i, j], indices);}}return pixelsArray;
}
辅助类:
(此处假设输入的tif文件是32位的图像,format32bppArgbFlag)
class GrayBitmapData
{private byte[,] Data;private int Width;private int Height;public GrayBitmapData(){this.Width = 0;this.Height = 0;this.Data = null;}public GrayBitmapData(Bitmap bmp){//from Bitmap to BitmapDataBitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadOnly, bmp.PixelFormat);this.Width = bmpData.Width;this.Height = bmpData.Height;Data = new byte[Height, Width];int temp = 0;unsafe{byte* ptr = (byte*)bmpData.Scan0.ToPointer();for (int i = 0; i < Height; i++){for (int j = 0; j < Width; j++){temp = (int)(0.114 * (*ptr++)) + (int)(0.587 * (*ptr++)) + (int)(0.299 * (*ptr++));//skip the blank or unused space bits ptr++;Data[i, j] = (byte)temp;}//skip the blank space bit//if (format24bppRgbFlag) ptr += bmpData.Stride - Width * 3;//if (format32bppArgbFlag) ptr += 0; // += bmpData.Stride - Width * 4; // https://www.cnblogs.com/dearzhoubi/p/8553763.html}}bmp.UnlockBits(bmpData);}public byte [,] GetData(){return Data;}
}
其他可能有用函数:(Bitmap <= 相互转换=> BitmapSource)
public static System.Drawing.Bitmap ToBitmap(BitmapSource source)
{using (System.IO.MemoryStream ms = new System.IO.MemoryStream()){BitmapEncoder encoder = new BmpBitmapEncoder();encoder.Frames.Add(BitmapFrame.Create(source));encoder.Save(ms);return new System.Drawing.Bitmap(ms);}
}public static BitmapSource ToBitmapSource(System.Drawing.Bitmap bmp)
{System.IntPtr hBitmap = bmp.GetHbitmap();try{return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, System.IntPtr.Zero, System.Windows.Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());}finally{DeleteObject(hBitmap);}
}[System.Runtime.InteropServices.DllImport("Gdi32.dll")]
private static extern bool DeleteObject(System.IntPtr hObject);
GIS笔记_普通tif文件转成array数组 c#相关推荐
- 怎么把tif文件转成jpg?试试这几招吧!值得收藏
怎么把tif文件转成jpg?将TIF 格式的图片文件转换为 JPG 格式可以提高图片文件的可用性和互通性,并且有着广泛的应用场景和重要的作用.因为在不同的环境中,TIF 格式的图片文件可能会遇到浏览器 ...
- java文件转换成byte数组以及byte数组上传到文件
文件转换成byte数组 /*** 文件 File file = new File("...");* @param filePath* @return*/public static ...
- tif文件转为shp文件_从Tif文件转为shp文件(ArcMap,代码)、gdal打包问题
从Tif文件转为shp文件(ArcMap,代码) 利用ArcMap来进行转换,以预测出来的滨海湿地图像为例 第一步:打开ArcMap中的栅格转面工具 ArcMap中的栅格转面工具 点击栅格转面之后,选 ...
- Java-马士兵设计模式学习笔记-观察者模式-读取properties文件改成单例模式
一.概述 1.目标:读取properties文件改成单例模式 二.代码 1.Test.java 1 class WakenUpEvent{ 2 3 private long time; 4 priva ...
- 转jpg java源程序_将pdf文件转成图片并删除java源代码
将pdf文件转成图片并删除java源代码/** * 将pdf转成img */ public static void changePdfToImg() { try { File file = new F ...
- java文件打包jar文件_把java文件打包成.jar (jar命令详解)
把java文件打包成.jar (jar命令详解) 先打开命令提示符(win2000或在运行框里执行cmd命令,win98为DOS提示符),输入jar Chelp,然后回车(如果你盘上已经有了jdk1. ...
- java文件打包成jar文件_将java文件打包成jar包步骤
将mypackage包中的FrameDemo.java文件打包成可执行成jar包 步骤1:先将程序中所有类打包成一个包 编译mypackage包FrameDemo.java文件,将类文件存入D盘Jar ...
- python视频格式转换_将ppt文件转成mp4视频的Python脚本
ppt2mp4 (Python2.7) 将ppt文件转成mp4视频.GitHub 前提 1.需要Windows系统,并且启用了Windows多媒体播放器.需要安装Office 2010已上版本.因为P ...
- ENVI将tif文件转成shp文件
打开ENVI, (1)File--Open image file:加载tif数据: (2)Vector--Raster to Vector,选择你要转换的tif文件,然后选择要转换的部分,我是二值图, ...
- python binascii array('c')_详解Python中的array数组模块相关使用
初始化array实例化可以提供一个参数来描述允许那种数据类型,还可以有一个初始的数据序列存储在数组中. import array import binascii s = 'This is the ar ...
最新文章
- 为什么企业选择年底裁员?如何选择一个正确的公司!
- Linux云服务器上python画图并保存
- mysql or的效率_Mysql比较exists与in以及or的效率分析
- 微软翻译突破百种语言和方言大关
- SAP PM入门系列3 - 设备主数据里无‘检验类型‘栏位,那何处定义维护订单可以触发检验批?
- Facebook创建新机器学习系统,用于对视频中的人脸进行“去识别化”
- 2.PyCharm安装和使用之HelloWorld
- python打开快捷方式_Python创建启动目录的快捷方式,python,到
- c语言计算成绩大于90为优秀,输入一个分数,如小于60分,则输出不及格;如大于60小于85,输出良好;85分以上则为优秀。 用c语言编写...
- python语法类似php吗_深入学习PHP还是Python
- html游戏代码_新手使用的Mac系统的简易代码编辑器推荐
- hdu1312---------------DFS模板(调用STL)
- 无限分级函数 简单 引用绑值
- Wireshark实战分析之ARP协议(一)
- 在ASF中使用On Demand生产DEM等产品时使用不同参考DEM的区别
- \t转义字符占几个字节?
- 海思多媒体(MPP)开发(9)——视频遮挡和运动检测
- layui富文本编辑器上传图片
- 天池小布助手对话短文本语义匹配-文本二分类实践(pytorch)
- *((int *) arg)