fitsfile *fptr; // FITS 文件指针
int status = 0; // CFITSIO 状态码
int dataType = 0;
int naxis; // 图像维度数组(宽+高+位深)
long *naxes; //存储(宽+高+位深);
LONGLONG firstelem = 1; // 要读取的第一个元素的索引(通常从1开始)
LONGLONG nelements = 1; // 要读取的元素数量(数据大小)
void *data = nullptr; //数据指针
void *data_array = nullptr; // 指向数据的指针
int *anynull = nullptr; // 标记是否有缺失值
int nkeys; //头信息数量
char card[FLEN_CARD]; //文件信息
int hudNum; //HUD数量
int hdutype; //HUD类型
int bitpix;
fits_open_file(&fptr, filePath, READONLY, &status);
if (status) { //状态码不为 0(无错误) 时执行.
fits_report_error(stderr, status);
return;
}
//获取头信息数量
fits_get_hdrspace(fptr, &nkeys, NULL, &status);
//qDebug()<<"nkeys"<<nkeys;
if (status) { //状态码不为 0(无错误) 时执行
fits_report_error(stderr, status);
fits_close_file(fptr, &status);
return;
}else{
// 获取头信息
QStringList list;
for (int ii = 1; ii <= nkeys; ii++) {
fits_read_record(fptr, ii, card, &status); /* read keyword */
list.append(card);
}
qDebug()<<list;
//fitsInfo.insert(filePath, list);
}
//获取HUD总数
fits_get_num_hdus(fptr, &hudNum, &status);
if (status) { //状态码不为 0(无错误) 时执行
fits_report_error(stderr, status);
fits_close_file(fptr, &status);
return;
}
for(int i = 1; i<=hudNum; ++i){
//移动到包含图像数据的 HDU
fits_movabs_hdu(fptr, i, NULL, &status); // 假设图像在第一个 HDU
if (status) {
fits_report_error(stderr, status);
fits_close_file(fptr, &status);
return;
}
fits_get_img_type(fptr, &bitpix, &status);
qDebug()<<"bitpix:"<<bitpix;
fits_get_hdu_type(fptr, &hdutype, &status);
if(hdutype == IMAGE_HDU){
// 获取图像的维度
fits_get_img_dim(fptr, &naxis, &status);
if (status) {
fits_report_error(stderr, status);
fits_close_file(fptr, &status);
return;
}
naxes = new long[naxis];
//qDebug()<< naxis;
fits_get_img_size(fptr, naxis, naxes, &status);
for (int i = 0; i < naxis; ++i) {
// 计算要读取的数据大小
nelements *= naxes[i];
qDebug()<<"naxes["<<i<<"]"<<naxes[i];
}
qDebug()<<"nelements:"<< nelements;
// 分配内存来存储图像数据
// 假设图像是浮点数(FLOAT),你需要根据实际的图像类型来分配内存
data_array = malloc(nelements * sizeof(unsigned short));
if (!data_array) {
// 内存分配失败处理
fits_close_file(fptr, &status);
return;
}
// 读取图像数据
fits_read_img(fptr, TUSHORT, firstelem, nelements, 0, data_array, anynull, &status);
if (status) {
qDebug()<<"status:"<<status;
fits_report_error(stderr, status);
free(data_array);
fits_close_file(fptr, &status);
return;
}else{
qDebug()<<"succ";
if(data_array == nullptr){
qDebug()<<"acc";
}
QImage img((unsigned char*)data_array, naxes[0] , naxes[1], naxes[0] * 2, QImage::Format_Grayscale16); // 24位
if(img.isNull()){
qDebug()<<"img null";
return;
}
//qDebug()<<"image size"<<img.size();
Image_Show(img);
}
//释放内存并关闭文件
free(data_array);
fits_close_file(fptr, &status);
}
}
fits_get_hdu_num(fptr, &hudNum); //当前的HDU位置 从1开始
qDebug()<<"HUD NUM:"<<hudNum;
12-22
3332
