资源简介
一般直接将tif转成jpg会造成图片变暗或者色彩差异较大,主要是因为直接线性拉伸导致了,这里我使用C#加gdal,将tif影像先进行百分比截断拉伸,再转jpg,效果直接类似于在arcgis中截图。另外,这个类中因为使用了gdal,所以如果直接用的话,还需要你的VS中引用gdal的类库,但最主要的是,我想介绍这个C# 百分比截断拉伸的算法
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OSGeo.GDAL;
using OSGeo.OSR;
namespace ImgProcess
{
class TifToJpg
{
public void ConvertToJpg(string tifPath string jpgPath)
{
//gdal读取影像
Dataset imgDatasat = Gdal.Open(tifPath Access.GA_ReadOnly);
int bandCount = imgDatasat.RasterCount;
int XSize = imgDatasat.RasterXSize;
int YSize = imgDatasat.RasterYSize;
Band[] bandArray = new Band[bandCount]; //用于存放三个波段
List bandData = new List(); //存放三个波段进行百分比截断之后的结果
//对每个波段进行处理
for (int j = 0; j < bandCount; j++)
{
int min = 0 max = 0;
Band band = imgDatasat.GetRasterBand(j + 1);
bandArray[j] = band;
int pixelCount = XSize * YSize;
//读取波段数据
int[] dataBuffer = new int[pixelCount];
band.ReadRaster(0 0 XSize YSize dataBuffer XSize YSize 0 0);
min = dataBuffer.Min();
max = dataBuffer.Max();
int[] histImg = new int[max - min];
band.GetHistogram(min - 0.5 max + 0.5 max - min histImg 1 0 null null); //生成直方图
int[] data = PercentClipStretchImg(dataBuffer pixelCount histImg 0.005 0.995); //百分比截断
bandData.Add(data);
}
//使用百分比截断后的数值依次对应rgb,生成bitmap
Bitmap bm = new Bitmap(XSize YSize);
for (int j = 0; j < YSize; j++)
{
for (int i = 0; i < XSize; i++)
{
int[] rgb = new int[3];
for (int k = 0; k < bandCount; k++)
{
rgb[k] = bandData[k][j * XSize + i];
}
Color color = Color.FromArgb(rgb[0] rgb[1] rgb[2]);
bm.SetPixel(i j color);
}
}
Graphics g = Graphics.FromImage(bm);
bm.Save(jpgPath System.Dr
- 上一篇:学生成绩管理系统C#实现
- 下一篇:VS2010下 C#最小二乘法图形界面及源代码
相关资源
- C#解析HL7消息的库135797
- C# OCR数字识别实例,采用TessnetOcr,对
- 考试管理系统 - C#源码
- asp.net C#购物车源代码
- C#实时网络流量监听源码
- C#百度地图源码
- Visual C#.2010从入门到精通配套源程序
- C# 软件版本更新
- C#屏幕软键盘源码,可以自己定制界面
- 智慧城市 智能家居 C# 源代码
- c#获取mobile手机的IMEI和IMSI
- C#实现简单QQ聊天程序
- 操作系统 模拟的 欢迎下载 C#版
- C#写的计算机性能监控程序
- 用C#实现邮件发送,有点类似于outlo
- MVC model层代码生成器 C#
- c#小型图书销售系统
- C# Socket Server Client 通讯应用 完整的服
- c# winform 自动登录 百度账户 源代码
- C#编写的16进制计算器
- C#TCP通信协议
- C# 数据表(Dataset)操作 合并 查询一
- C#语音识别系统speechsdk51,SpeechSDK51L
- 数据库备份还原工具1.0 C# 源码
-
[免费]xm
lDocument 节点遍历C# - EQ2008LEDc#开发实例
- DirectX.Capturec# winform 操作摄像头录像附
- c# 实现的最大最小距离方法对鸢尾花
- C#版保龄球记分代码
- C#自定义控件
评论
共有 条评论