zoukankan      html  css  js  c++  java
  • c#调用GDAL判断图片文件是否损坏

    问题缘起

    有一次去北京给客户交航飞影像数据,客户那边用一个软件跑了一下所有的影像发现有几十个.tif文件打不开,这下把我们急的,就差最后一步还是出错了,我们也没没带原始数据盘,没办法还的回家拿数据再来一次。这时候同事就想能不能自己写一个程序看一下是否影像有损毁,我分析了一下,大体上有三种解决方案。

    通过文件头文件判断

    这个方案否定了,通过文件头不能真正的判断是否损坏,而且不同格式的文件头还不一样。

    通过代码加载图片

    这个方案也否定了,超过几G的大文件会出现内存过载的情况。

    使用专业的GDAL图像库进行加载

    GDAL使用c++写的跨平台的开源栅格空间数据转换库(也支持矢量数据),很多企业级的GIS软件例如arcgis,以及开源的QGIS读取影像都使用这个库。我们只需使用GDAL加载数据就可以判断文件是否加载正常即可。

    c#调用GDAL

    c#引用GDAL

    解决初始化出现异常:OSGeo.GDAL.GdalPINVOKE”的类型初始值设定项引发异常。
    使用nuget方式引用GDAL就可以解决上面的异常
    install-package GDAL

    install-package GDAL.Native

    GDAL初始化

                GdalConfiguration.ConfigureGdal();
                GdalConfiguration.ConfigureOgr();
                Gdal.AllRegister();
    

    判断影像是否损坏


    通过打开文件,判断返回的OSGeo.GDAL.Dataset 是否为空,即可判断是否损坏。

                string[] filedir = Directory.GetFiles(textBox16.Text, "*" + textBox1.Text, SearchOption.AllDirectories);
                string delpathstrings = "";
                foreach (string item in filedir)
                {
                    try
                    {
                        OSGeo.GDAL.Dataset dataset = OSGeo.GDAL.Gdal.Open(item, OSGeo.GDAL.Access.GA_ReadOnly);
                        if (dataset == null)
                        {
                            delpathstrings += item + "\r\n";
                        }
                    }
                    catch (Exception ex)
                    {
    
                        delpathstrings += item + "----" + ex.Message + "\r\n";
                    }
                }
    

     转自:https://www.cnblogs.com/ATtuing/p/13564107.html

  • 相关阅读:
    javascript设计思维
    asp.net时间类-格式-方法应用
    javascript简写精练
    保存html代码
    jQuery.cookie应用操作
    ASP.NET 打包多CSS或JS文件以加快页面加载速度的Handler
    Asp.Net下通过切换CSS换皮肤
    让你的ASP.NET虚拟主机也支持子网站
    javascript获取和设置URL中的参数
    获取和设置URL里星号(#)的参数
  • 原文地址:https://www.cnblogs.com/siyunianhua/p/15771005.html
Copyright © 2011-2022 走看看