88 lines
2.1 KiB
C++
88 lines
2.1 KiB
C++
#include "stdafx.h"
|
|
#include <iostream>
|
|
|
|
#include "ImageReaderWriter.h"
|
|
|
|
|
|
|
|
ImageReaderWriter::ImageReaderWriter(const char * fileName)
|
|
{
|
|
GDALAllRegister();
|
|
m_poDataset = (GDALDataset *)GDALOpen(fileName, GA_ReadOnly);
|
|
if (m_poDataset == NULL)
|
|
{
|
|
std::cout << "打开影像失败!" << std::endl;
|
|
return;
|
|
}
|
|
|
|
//获取影像信息
|
|
m_DataType = m_poDataset->GetRasterBand(1)->GetRasterDataType();
|
|
m_iBands = m_poDataset->GetRasterCount();
|
|
m_iXCount = m_poDataset->GetRasterXSize();
|
|
m_iYCount = m_poDataset->GetRasterYSize();
|
|
|
|
}
|
|
|
|
ImageReaderWriter::ImageReaderWriter()
|
|
{
|
|
|
|
}
|
|
|
|
float * ImageReaderWriter::ReadImage(int nXOff, int nYOff, int nXSize, int nYSize)
|
|
{
|
|
int xBuff = nXSize;
|
|
int yBuff = nYSize;
|
|
|
|
|
|
if (m_DataType == GDT_Byte)
|
|
{
|
|
unsigned char *pDataBuffer = (unsigned char*)CPLMalloc(sizeof(unsigned int)*(1)*(1)*(m_iBands));//unsigned char=BYTE
|
|
memset(pDataBuffer, 0, 1 * 1 * m_iBands * sizeof(unsigned char));
|
|
}
|
|
else if (m_DataType == GDT_UInt16)
|
|
{
|
|
//WORD *pDataBuffer = new WORD[1 * 1 * m_iBands];//WORD=unsigned short
|
|
//memset(pDataBuffer, 0, 1 * 1 * m_iBands*sizeof(WORD));
|
|
|
|
float *pDataBuffer = (float*)CPLMalloc(sizeof(float)*(1)*(1)*(m_iBands));
|
|
memset(pDataBuffer, 0, 1 * 1 * m_iBands * sizeof(float));
|
|
|
|
CPLErr status = m_poDataset->RasterIO(GF_Read, nXOff, nYOff, nXSize, nYSize, pDataBuffer, xBuff, yBuff, GDT_Float32, m_iBands, NULL, 0, 0, 0); //先高后宽
|
|
|
|
if (status != CE_None)
|
|
{
|
|
std::cout << "读取影像失败!" << std::endl;
|
|
return 0;
|
|
}
|
|
|
|
/*for (size_t i = 0; i < m_iBands; i++)
|
|
{
|
|
std::cout << *pDataBuffer << std::endl;
|
|
pDataBuffer++;
|
|
}*/
|
|
|
|
return pDataBuffer;
|
|
}
|
|
else if (m_DataType == GDT_UInt32)
|
|
{
|
|
unsigned int *pDataBuffer = (unsigned int*)CPLMalloc(sizeof(unsigned int)*(1)*(1)*(m_iBands));
|
|
memset(pDataBuffer, 0, 1 * 1 * m_iBands * sizeof(unsigned int));
|
|
}
|
|
else if (m_DataType == GDT_Float32)
|
|
{
|
|
float *pDataBuffer = (float*)CPLMalloc(sizeof(float)*(1)*(1)*(m_iBands));
|
|
memset(pDataBuffer, 0, 1 * 1 * m_iBands * sizeof(float));
|
|
}
|
|
|
|
}
|
|
|
|
int ImageReaderWriter::getXCount() const
|
|
{
|
|
return m_iXCount;
|
|
}
|
|
|
|
int ImageReaderWriter::getyCount() const
|
|
{
|
|
return m_iYCount;
|
|
}
|