通过GDAL的c#绑定支持Arc/Info二进制网格格式



我想读取Arc/Info二进制网格,并使用GDAL的c#绑定将它们转换为其他图像格式。我从这里安装了FWTools 2.4.7和当前的二进制文件(MSVC2010 (Win64) -stable)。然后我开始测试作为FWTools一部分的c#示例程序,特别是GDALRead.cs和GDALReadDirect.cs。当我使用演示数据集utm.tif时,这一切都很好。

然后我使用ArcMap 10(转换工具-到栅格-栅格到其他格式)将utm.tif转换为Arc/Info二进制网格格式。当我尝试使用GDALRead.csGDALReadDirect.cs时,我得到以下错误消息:

GDALRead.cs:

Using driver Arc/Info Binary Grid
Band 1 :
DataType: GDT_Int16
Size (512,512)
PaletteInterp: GCI_Undefined
  OverView 0 :
     DataType: GDT_Int16
     Size (256,256)
     PaletteInterp: GCI_GrayIndex
  OverView 1 :
     DataType: GDT_Int16
     Size (128,128)
     PaletteInterp: GCI_GrayIndex
Non RGB images are not supported by this sample! ColorInterp = GCI_Undefined

GDALReadDirect.cs:

Using driver Arc/Info Binary Grid
Band 1 :
   DataType: GDT_Int16
   Size (512,512)
   PaletteInterp: GCI_Undefined
      OverView 0 :
         DataType: GDT_Int16
         Size (256,256)
         PaletteInterp: GCI_GrayIndex
      OverView 1 :
         DataType: GDT_Int16
         Size (128,128)
         PaletteInterp: GCI_GrayIndex
The number of the raster bands is not enough to run this sample

这个行为对我来说有点奇怪,因为我没有改变数据集,我只是把它转换成一种新的格式。任何关于这种行为的原因的提示,以及我如何通过c#使用GDAL将ArcInfo二进制网格转换为其他图像格式。

GDALReadDirect.cs有一个名为SaveBitMapDirect的错误方法,该方法首先检查可用的颜色解释,然后检查频带的数量。在文件转换为Arc/Info二进制网格格式后,有关颜色解释的信息丢失,因此只有这时程序检查可用波段的数量并返回错误消息。如果编辑了第157行,则SaveBitMapDirect适用于所描述的情况:

if (redBand.GetRasterColorInterpretation() == ColorInterp.GCI_GrayIndex || redBand.GetRasterColorInterpretation() == ColorInterp.GCI_Undefined)

这不是一般的修复,只是针对当前的问题。

最新更新