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

  • 相关阅读:
    三层数据访问层的参数处理
    图片加水印
    网站程序安全策略
    如何在.NET下使用MetaWeBlog API迁移博客
    如何使用NAnt 自动打包DNN模块 之二
    无法转出.cn域名到Godaay.com
    如何避免ASP.NET网页初次加载缓慢
    Teradata Automation Developer 职位
    How to let FIR open a URL when you click an image
    如何使用.NET清除IE的缓存(Temporary Internet Files)
  • 原文地址:https://www.cnblogs.com/siyunianhua/p/15771005.html
Copyright © 2011-2022 走看看