Files
HPPA/HPPA/ImageReaderWriter.cpp
2026-04-02 10:34:57 +08:00

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;
}