kealib
Loading...
Searching...
No Matches
KEAImageIO.h
Go to the documentation of this file.
1/*
2 * KEAImageIO.h
3 * LibKEA
4 *
5 * Created by Pete Bunting on 02/07/2012.
6 * Copyright 2012 LibKEA. All rights reserved.
7 *
8 * This file is part of LibKEA.
9 *
10 * Permission is hereby granted, free of charge, to any person
11 * obtaining a copy of this software and associated documentation
12 * files (the "Software"), to deal in the Software without restriction,
13 * including without limitation the rights to use, copy, modify,
14 * merge, publish, distribute, sublicense, and/or sell copies of the
15 * Software, and to permit persons to whom the Software is furnished
16 * to do so, subject to the following conditions:
17 *
18 * The above copyright notice and this permission notice shall be
19 * included in all copies or substantial portions of the Software.
20 *
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
23 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
25 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
26 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 *
29 */
30
38#ifndef KEAImageIO_H
39#define KEAImageIO_H
40
41#include <iostream>
42#include <string>
43#include <vector>
44
45#include <highfive/highfive.hpp>
46
47#include "libkea/KEACommon.h"
48#include "libkea/KEAException.h"
52
53namespace kealib{
54
55 class KEA_EXPORT KEAImageIO : public KEABase
56 {
57 public:
59
74 void openKEAImageHeader(HighFive::File *keaImgH5File);
75
99 void writeImageBlock2Band(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut, uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType);
128 void readImageBlock2Band(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn, uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType);
129
140 void createMask(uint32_t band, uint32_t deflate=KEA_DEFLATE);
141
159 void writeImageBlock2BandMask(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut, uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType);
160
180 void readImageBlock2BandMask(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn, uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType);
187 bool maskCreated(uint32_t band);
188
196 void setImageMetaData(const std::string &name, const std::string &value);
203 std::string getImageMetaData(const std::string &name);
208 std::vector<std::string> getImageMetaDataNames();
213 std::vector< std::pair<std::string, std::string> > getImageMetaData();
219 void setImageMetaData(const std::vector< std::pair<std::string, std::string> > &data);
220
229 void setImageBandMetaData(uint32_t band, const std::string &name, const std::string &value);
237 std::string getImageBandMetaData(uint32_t band, const std::string &name);
244 std::vector<std::string> getImageBandMetaDataNames(uint32_t band);
250 std::vector< std::pair<std::string, std::string> > getImageBandMetaData(uint32_t band);
257 void setImageBandMetaData(uint32_t band, const std::vector< std::pair<std::string, std::string> > &data);
258
266 void setImageBandDescription(uint32_t band, const std::string &description);
273 std::string getImageBandDescription(uint32_t band);
274
283 void setNoDataValue(uint32_t band, const void *data, KEADataType inDataType);
292 void getNoDataValue(uint32_t band, void *data, KEADataType inDataType);
299 void undefineNoDataValue(uint32_t band);
300
306 std::vector<KEAImageGCP*>* getGCPs();
312 void setGCPs(std::vector<KEAImageGCP*> *gcps, const std::string &projWKT);
318 uint32_t getGCPCount();
324 std::string getGCPProjection();
331 void setGCPProjection(const std::string &projWKT);
332
344
349
365 uint32_t getImageBlockSize(uint32_t band);
366
374
380 std::string getKEAImageVersion();
381
389 void setImageBandLayerType(uint32_t band, KEALayerType imgLayerType);
396
404 void setImageBandClrInterp(uint32_t band, KEABandClrInterp imgLayerClrInterp);
412
422 void createOverview(uint32_t band, uint32_t overview, uint64_t xSize, uint64_t ySize);
430 void removeOverview(uint32_t band, uint32_t overview);
438 uint32_t getOverviewBlockSize(uint32_t band, uint32_t overview);
454 void writeToOverview(uint32_t band, uint32_t overview, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut, uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType);
472 void readFromOverview(uint32_t band, uint32_t overview, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn, uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType);
479 uint32_t getNumOfOverviews(uint32_t band);
489 void getOverviewSize(uint32_t band, uint32_t overview, uint64_t *xSize, uint64_t *ySize);
490
508 void setAttributeTable(KEAAttributeTable* att, uint32_t band, uint32_t chunkSize=KEA_ATT_CHUNK_SIZE, uint32_t deflate=KEA_DEFLATE);
515 bool attributeTablePresent(uint32_t band);
521 uint32_t getAttributeTableChunkSize(uint32_t band);
522
527 void close();
528
544 virtual void addImageBand(const KEADataType dataType, const std::string &bandDescrip, const uint32_t imageBlockSize = KEA_IMAGE_CHUNK_SIZE, const uint32_t attBlockSize = KEA_ATT_CHUNK_SIZE, const uint32_t deflate = KEA_DEFLATE);
545
558 virtual void removeImageBand(const uint32_t bandIndex);
559
594 static HighFive::File* createKEAImage(const std::string &fileName, KEADataType dataType, uint32_t xSize, uint32_t ySize, uint32_t numImgBands, std::vector<std::string> *bandDescrips=NULL, KEAImageSpatialInfo *spatialInfo=NULL, uint32_t imageBlockSize=KEA_IMAGE_CHUNK_SIZE, uint32_t attBlockSize=KEA_ATT_CHUNK_SIZE, int mdcElmts=KEA_MDC_NELMTS, hsize_t rdccNElmts=KEA_RDCC_NELMTS, hsize_t rdccNBytes=KEA_RDCC_NBYTES, double rdccW0=KEA_RDCC_W0, hsize_t sieveBuf=KEA_SIEVE_BUF, hsize_t metaBlockSize=KEA_META_BLOCKSIZE, uint32_t deflate=KEA_DEFLATE);
611 static bool isKEAImage(const std::string &fileName);
634 static HighFive::File* openKeaH5RW(const std::string &fileName, int mdcElmts=KEA_MDC_NELMTS, hsize_t rdccNElmts=KEA_RDCC_NELMTS, hsize_t rdccNBytes=KEA_RDCC_NBYTES, double rdccW0=KEA_RDCC_W0, hsize_t sieveBuf=KEA_SIEVE_BUF, hsize_t metaBlockSize=KEA_META_BLOCKSIZE);
659 static HighFive::File* openKeaH5RDOnly(const std::string &fileName, int mdcElmts=KEA_MDC_NELMTS, hsize_t rdccNElmts=KEA_RDCC_NELMTS,
660 hsize_t rdccNBytes=KEA_RDCC_NBYTES, double rdccW0=KEA_RDCC_W0, hsize_t sieveBuf=KEA_SIEVE_BUF,
661 hsize_t metaBlockSize=KEA_META_BLOCKSIZE, hid_t driver_id=0, const void* driver_info=nullptr);
662 virtual ~KEAImageIO();
663
668 static HighFive::CompoundType createGCPCompType();
669
670 protected:
671 /********** STATIC PROTECTED **********/
690 static HighFive::DataType convertDatatypeKeaToH5STD(const KEADataType dataType);
691
706 static HighFive::DataType convertDatatypeKeaToH5Native( const KEADataType dataType);
707
723 static const std::string convertDatatypeKeaToCStdStr(const KEADataType dataType);
724
746 static void addImageBandToFile(HighFive::File *keaImgH5File, const KEADataType dataType, const uint32_t xSize, const uint32_t ySize, const uint32_t bandIndex, const std::string &bandDescrip, const uint32_t imageBlockSize, const uint32_t attBlockSize, const uint32_t deflate);
747
766 static void removeImageBandFromFile(HighFive::File *keaImgH5File, const uint32_t bandIndex, const uint32_t numImgBands);
767
785 static void setNumImgBandsInFileMetadata(HighFive::File *keaImgH5File, const uint32_t numImgBands);
786
807 void readImageFromDataset(const HighFive::DataSet &dataset, uint32_t band,
808 void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn,
809 uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType,
810 bool ismask=false);
811
830 void writeImageToDataset(HighFive::DataSet &dataset,
831 void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut,
832 uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType);
833
834
835
836 //static std::string readString(H5::DataSet& dataset, H5::DataType strDataType);
837
838 /********** PROTECTED MEMBERS **********/
840 HighFive::File *keaImgFile;
842 uint32_t numImgBands;
843 std::string keaVersion;
844 };
845
846}
847
848// returns the current KEA version as a double
849extern "C" KEA_EXPORT double get_kealibversion();
850
851#endif
852
853
854
855
KEA_EXPORT double get_kealibversion()
Definition KEAAttributeTable.h:114
Definition KEACommon.h:348
Definition KEAImageIO.h:56
static HighFive::DataType convertDatatypeKeaToH5Native(const KEADataType dataType)
uint32_t getImageBlockSize(uint32_t band)
std::string getImageBandMetaData(uint32_t band, const std::string &name)
uint32_t getNumOfImageBands()
bool fileOpen
Definition KEAImageIO.h:839
static const std::string convertDatatypeKeaToCStdStr(const KEADataType dataType)
std::vector< std::pair< std::string, std::string > > getImageBandMetaData(uint32_t band)
KEAAttributeTable * getAttributeTable(KEAATTType type, uint32_t band)
void removeOverview(uint32_t band, uint32_t overview)
void setImageBandDescription(uint32_t band, const std::string &description)
void setImageMetaData(const std::vector< std::pair< std::string, std::string > > &data)
static HighFive::File * createKEAImage(const std::string &fileName, KEADataType dataType, uint32_t xSize, uint32_t ySize, uint32_t numImgBands, std::vector< std::string > *bandDescrips=NULL, KEAImageSpatialInfo *spatialInfo=NULL, uint32_t imageBlockSize=KEA_IMAGE_CHUNK_SIZE, uint32_t attBlockSize=KEA_ATT_CHUNK_SIZE, int mdcElmts=KEA_MDC_NELMTS, hsize_t rdccNElmts=KEA_RDCC_NELMTS, hsize_t rdccNBytes=KEA_RDCC_NBYTES, double rdccW0=KEA_RDCC_W0, hsize_t sieveBuf=KEA_SIEVE_BUF, hsize_t metaBlockSize=KEA_META_BLOCKSIZE, uint32_t deflate=KEA_DEFLATE)
void createMask(uint32_t band, uint32_t deflate=KEA_DEFLATE)
uint32_t getGCPCount()
KEAImageSpatialInfo * spatialInfoFile
Definition KEAImageIO.h:841
KEAImageSpatialInfo * getSpatialInfo()
void getOverviewSize(uint32_t band, uint32_t overview, uint64_t *xSize, uint64_t *ySize)
KEALayerType getImageBandLayerType(uint32_t band)
void readImageFromDataset(const HighFive::DataSet &dataset, uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn, uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType, bool ismask=false)
void undefineNoDataValue(uint32_t band)
void setAttributeTable(KEAAttributeTable *att, uint32_t band, uint32_t chunkSize=KEA_ATT_CHUNK_SIZE, uint32_t deflate=KEA_DEFLATE)
HighFive::File * keaImgFile
Definition KEAImageIO.h:840
std::string getGCPProjection()
void createOverview(uint32_t band, uint32_t overview, uint64_t xSize, uint64_t ySize)
void writeImageBlock2Band(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut, uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType)
static bool isKEAImage(const std::string &fileName)
uint32_t numImgBands
Definition KEAImageIO.h:842
void readFromOverview(uint32_t band, uint32_t overview, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn, uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType)
bool maskCreated(uint32_t band)
void setImageBandLayerType(uint32_t band, KEALayerType imgLayerType)
void readImageBlock2Band(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn, uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType)
void getNoDataValue(uint32_t band, void *data, KEADataType inDataType)
static HighFive::CompoundType createGCPCompType()
virtual ~KEAImageIO()
static HighFive::File * openKeaH5RW(const std::string &fileName, int mdcElmts=KEA_MDC_NELMTS, hsize_t rdccNElmts=KEA_RDCC_NELMTS, hsize_t rdccNBytes=KEA_RDCC_NBYTES, double rdccW0=KEA_RDCC_W0, hsize_t sieveBuf=KEA_SIEVE_BUF, hsize_t metaBlockSize=KEA_META_BLOCKSIZE)
bool attributeTablePresent(uint32_t band)
KEADataType getImageBandDataType(uint32_t band)
void readImageBlock2BandMask(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeIn, uint64_t ySizeIn, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType)
virtual void addImageBand(const KEADataType dataType, const std::string &bandDescrip, const uint32_t imageBlockSize=KEA_IMAGE_CHUNK_SIZE, const uint32_t attBlockSize=KEA_ATT_CHUNK_SIZE, const uint32_t deflate=KEA_DEFLATE)
void writeImageBlock2BandMask(uint32_t band, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut, uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType)
std::string getImageMetaData(const std::string &name)
void setGCPs(std::vector< KEAImageGCP * > *gcps, const std::string &projWKT)
std::string getImageBandDescription(uint32_t band)
static void addImageBandToFile(HighFive::File *keaImgH5File, const KEADataType dataType, const uint32_t xSize, const uint32_t ySize, const uint32_t bandIndex, const std::string &bandDescrip, const uint32_t imageBlockSize, const uint32_t attBlockSize, const uint32_t deflate)
std::vector< std::string > getImageBandMetaDataNames(uint32_t band)
std::vector< std::string > getImageMetaDataNames()
static HighFive::File * openKeaH5RDOnly(const std::string &fileName, int mdcElmts=KEA_MDC_NELMTS, hsize_t rdccNElmts=KEA_RDCC_NELMTS, hsize_t rdccNBytes=KEA_RDCC_NBYTES, double rdccW0=KEA_RDCC_W0, hsize_t sieveBuf=KEA_SIEVE_BUF, hsize_t metaBlockSize=KEA_META_BLOCKSIZE, hid_t driver_id=0, const void *driver_info=nullptr)
static void removeImageBandFromFile(HighFive::File *keaImgH5File, const uint32_t bandIndex, const uint32_t numImgBands)
void setNoDataValue(uint32_t band, const void *data, KEADataType inDataType)
static HighFive::DataType convertDatatypeKeaToH5STD(const KEADataType dataType)
uint32_t getAttributeTableChunkSize(uint32_t band)
std::vector< KEAImageGCP * > * getGCPs()
void setGCPProjection(const std::string &projWKT)
void setImageBandClrInterp(uint32_t band, KEABandClrInterp imgLayerClrInterp)
uint32_t getNumOfOverviews(uint32_t band)
void setImageBandMetaData(uint32_t band, const std::string &name, const std::string &value)
std::string getKEAImageVersion()
void setImageMetaData(const std::string &name, const std::string &value)
void openKEAImageHeader(HighFive::File *keaImgH5File)
void setImageBandMetaData(uint32_t band, const std::vector< std::pair< std::string, std::string > > &data)
void writeToOverview(uint32_t band, uint32_t overview, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut, uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType)
std::string keaVersion
Definition KEAImageIO.h:843
static void setNumImgBandsInFileMetadata(HighFive::File *keaImgH5File, const uint32_t numImgBands)
uint32_t getOverviewBlockSize(uint32_t band, uint32_t overview)
virtual void removeImageBand(const uint32_t bandIndex)
void setSpatialInfo(KEAImageSpatialInfo *spatialInfo)
KEABandClrInterp getImageBandClrInterp(uint32_t band)
std::vector< std::pair< std::string, std::string > > getImageMetaData()
void writeImageToDataset(HighFive::DataSet &dataset, void *data, uint64_t xPxlOff, uint64_t yPxlOff, uint64_t xSizeOut, uint64_t ySizeOut, uint64_t xSizeBuf, uint64_t ySizeBuf, KEADataType inDataType)
Definition KEAAttributeTable.h:45
KEALayerType
Definition KEACommon.h:173
KEAATTType
Definition KEAAttributeTable.h:48
KEABandClrInterp
Definition KEACommon.h:179
KEADataType
Definition KEACommon.h:158
Definition KEACommon.h:200