|
XRasterIODumpFile Method
|
영상 파일의 이미지와 메타데이터를 다른 영상 파일 형식과 xml 파일로 각각 저장한다.
출력 파일 경로를 "C:\abc.tif"로 설정시 abc.tif와 abc.xml로 영상과 메타정보가 저장된다.
입력 영상 파일 포맷이 HDF5일 경우, 각 DataSet별로 영상 파일로 저장되고 메타정보는 하나의 xml 파일로 저장된다.
Namespace: Pixoneer.NXDL.NIOAssembly: NXDLio (in NXDLio.dll) Version: 3.0.0.2
Syntaxpublic bool DumpFile(
string strFileName,
string strSaveFileName,
string strFormatKey,
XRSMetaData openOption,
XRSMetaData creationOption,
out string strError,
XThread thd
)
Parameters
- strFileName String
- [In] 입력 파일 경로
- strSaveFileName String
- [In] 출력 파일 경로
- strFormatKey String
- [In] 파일 형식 키워드. ( 예: XDM, BIP, BIL, BSQ 또는 GDAL Raster drivers의 short name(GTiff, NITF, JPEG, BMP...) )
BIP(Band Interleaved by Pixel), BIL(Band Interleaved by Line), BSQ(Band Sequential)
- openOption XRSMetaData
-
[In] Open Option을 설정한다.
* Open Option
- HDF_XSIZE_INDEX : HDF5의 DataSet dimension 중에서 가로 방향 사이즈로 사용할 값 인덱스를 설정한다.
- HDF_YSIZE_INDEX : HDF5의 DataSet dimension 중에서 세로 방향 사이즈로 사용할 값 인덱스를 설정한다.
- HDF_BAND_INDEX : HDF5의 DataSet dimension 중에서 밴드 개수로 사용할 값 인덱스를 설정한다.
- HDF_XSIZE_INDEX, HDF_YSIZE_INDEX, HDF_BAND_INDEX는 HDF5 dataset의 dimension 이 3 이상이고 dimension[2]가 2일 경우에만 적용된다.
- creationOption XRSMetaData
-
[In] Creation Option을 설정한다.
* Creation Option
- HDF_APPLY_HALFFLOAT : 입력 파일이 HDF5이고 DataSet(예:Kompsat5 L1A 영상)이 half float data type일 경우, dump할 때 half float 적용한 데이타 값으로 저장할 것인지 여부를 설정한다.
half float 적용한 data의 data type은 REAL32 로 저장된다.
- IBAND_INDEX : 입력 파일의 band가 두개일 경우, complex data type으로 파일을 dump하고자 할 때 IBand로 사용할 band index를 설정한다.
저장하고자 하는 complex data type을 dump할 파일 포맷이 지원하는 경우 정상 적용된다.
- QBAND_INDEX : 입력 파일의 band가 두개일 경우, complex data type으로 파일을 dump하고자 할 때 QBand로 사용할 band index를 설정한다.
저장하고자 하는 complex data type을 dump할 파일 포맷이 지원하는 경우 정상 적용된다.
- strError String
- [Out] 에러 발생시 오류 메시지
- thd XThread
- [In] Thread
Return Value
Boolean 성공이면 true, 실패이면 false를 반환
Example
아래는 tif 파일을 ntf 파일 포맷으로 dump하는 예제이다.
using Pixoneer.NXDL;
using Pixoneer.NXDL.NIO;
using Pixoneer.NXDL.NRS;
XRasterIO rasterIO = new XRasterIO();
string strError = "";
if (!rasterIO.Initialize(out strError))
MessageBox.Show(strError);
string strInputPath = @"F:\SAMPLE_IMAGE\test01.tif";
string strOutputPath = @"F:\SAMPLE_IMAGE\dump02.ntf";
bool bRes = rasterIO.DumpFile(strInputPath, strOutputPath, "NITF", null, null, out strError, null);
아래는 HDF5 파일을 tif 파일 포맷으로 dump하는 예제이다.
using Pixoneer.NXDL;
using Pixoneer.NXDL.NIO;
using Pixoneer.NXDL.NRS;
XRasterIO rasterIO = new XRasterIO();
string strError = "";
if (!rasterIO.Initialize(out strError))
MessageBox.Show(strError);
string strInputPath = @"F:\SAMPLE_IMAGE\test.h5";
string strOutputPath = @"F:\SAMPLE_IMAGE\dump.tif";
XRSMetaData openOption = new XRSMetaData();
openOption.SetValue("HDF_XSIZE_INDEX", "1", "OpenOption");
openOption.SetValue("HDF_YSIZE_INDEX", "0", "OpenOption");
openOption.SetValue("HDF_BAND_INDEX", "2", "OpenOption");
XRSMetaData creationOption = new XRSMetaData();
creationOption.SetValue("HDF_APPLY_HALFFLOAT", "Yes", "CreationOption");
creationOption.SetValue("IBAND_INDEX", "0", "CreationOption");
creationOption.SetValue("QBAND_INDEX", "1", "CreationOption");
bool bRes = rasterIO.DumpFile(strInputPath, strOutputPath, "GTiff", openOption, creationOption, out strError, null);
아래는 h5의 attribtue와 dataset 정보를 저장한 xml파일과 영상 데이타 tif를 h5 파일 포맷으로 dump하는 예제이다.
CreationOption의 "IBAND_INDEX", "QBAND_INDEX" 옵션 설정만 가능하다(한 영상 파일의 밴드가 2개이고 complex data일 경우에 사용된다).
xml의 대략적인 형식은 아래와 같다.
<? xml version = "1.0" encoding = "UTF-8" ?>
<PixMetaData version = "1">
<PixDumpFileInfo>
<SourceFile>
<Attr key = "FileName">test.h5</Attr>
<Attr key = "DataSet0">[763x661] //S01/QLK (8-bit unsigned character)</Attr>
<Attr key = "DataSet1">[7638x6615x2] //S01/SBI (16-bit integer)</Attr>
</SourceFile>
<DumpFile>
<File0>
<Attr key = "FileName">dump_S01_QLK.tif</Attr>
<Band0>
<Attr key = "Name">Channel 1 </Attr>
<Attr key = "XSize">661 </Attr>
<Attr key = "YSize">763 </Attr>
<Attr key = "DataType">UINT08</Attr>
</Band0>
</File0>
<File1>
<Attr key = "FileName">dump_S01_SBI.tif</Attr>
<Band0>
<Attr key = "Name">Channel 1 </Attr>
<Attr key = "XSize">6615 </Attr>
<Attr key = "YSize">7638 </Attr>
<Attr key = "DataType">SINT16</Attr>
</Band0>
<Band1>
<Attr key = "Name">Channel 2 </Attr>
<Attr key = "XSize">6615 </Attr>
<Attr key = "YSize">7638 </Attr>
<Attr key = "DataType">SINT16</Attr>
</Band1>
</File1>
</DumpFile>
<OpenOption>
<Attr key = "HDF_BAND_INDEX">2 </Attr>
<Attr key = "HDF_XSIZE_INDEX">1 </Attr>
<Attr key = "HDF_YSIZE_INDEX">0 </Attr>
</OpenOption>
</PixDumpFileInfo>
<Root filename = "test.h5">
<Attr key = "Attr1" datatype = "REAL64" arraysize = "3*2">-0.25 - 0.25 - 0.24 - 0.24 - 0.24 - 0.24 </Attr>
<Attr key = "Attr2" datatype = "UINT08" arraysize = "Scalar">0 </Attr >
<Attr key = "Attr3" datatype = "String" length = "24" padding = "H5T_STR_NULLTERM" cset = "H5T_CSET_ASCII" arraysize = "Scalar">HIGH RESOLUTION</Attr> <!--고정길이 String-->
<!--<Attr key = "Attr33" datatype = "String" length = "variable" padding = "H5T_STR_NULLTERM" cset = "H5T_CSET_ASCII" arraysize = "Scalar">HH</Attr>--> <!--가변길이 String-->
<Attr key = "Attr4" datatype = "REAL64" arraysize = "16">2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 </Attr >
<Group name = "S01" path = "/S01">
<Attr key = "Attr5" datatype = "REAL64" arraysize = "10">0 0 0 0 0 0 0 0 0 0 </Attr>
<Group name = "B001" path = "/S01/B001">
<Attr key = "Attr6" datatype = "REAL64" arraysize = "Scalar">2858.72116518021 </Attr>
</Group>
<DataSet name = "QLK" path = "/S01/QLK" num_of_dimension = "2" dimension_size = "[0,1] : [763,661]" max_dimension_size = "Unlimited*Unlimited" storage_layout = "CHUNKED:8*128" datatype = "UINT08" filename = "dump_S01_QLK.tif" file_num_of_band = "1" file_datatype = "UINT08"> < !--storage_layout = "CHUNKED -->
<!--<DataSet name = "QLK" path = "/QLK" num_of_dimension = "2" dimension_size = "[0,1] : [2300,2564]" max_dimension_size = "2300*2564" storage_layout = "CONTIGUOUS" datatype = "UINT08" filename = "dump_S01_QLK.tif" file_num_of_band = "1" file_datatype = "UINT08">-- > <!--storage_layout = "CONTIGUOUS" -->
<Attr key = "Attr7" datatype = "REAL64" arraysize = "Scalar">5.47866334064327 </Attr>
</DataSet>
<DataSet name = "SBI" path = "/S01/SBI" num_of_dimension = "3" dimension_size = "[0,1,2] : [7638,6615,2]" max_dimension_size = "Unlimited*Unlimited*2" storage_layout = "CHUNKED:8*128*2" datatype = "SINT16" filename = "dump_S01_SBI.tif" file_num_of_band = "2" file_datatype = "SINT16">
<Attr key = "Attr8" datatype = "REAL64" arraysize = "Scalar">2.25235195351238e-08 </Attr>
</DataSet>
</Group>
</Root>
</PixMetaData>
using Pixoneer.NXDL;
using Pixoneer.NXDL.NIO;
using Pixoneer.NXDL.NRS;
XRasterIO rasterIO = new XRasterIO();
string strError = "";
if (!rasterIO.Initialize(out strError))
MessageBox.Show(strError);
string strInputPath = @"F:\SAMPLE_IMAGE\dump.xml";
string strOutputPath = @"F:\SAMPLE_IMAGE\saveHDF.h5";
XRSMetaData creationOption = new XRSMetaData();
creationOption.SetValue("IBAND_INDEX", "0", "CreationOption");
creationOption.SetValue("QBAND_INDEX", "1", "CreationOption");
bool bRes = rasterIO.DumpFile(strInputPath, strOutputPath, "HDF5", null, creationOption, out strError, null);
See Also