我正在使用 C++ 处理适合的图像。这种格式可以保存 8/16/32 位整数和 32/64 位浮点数组。像素大小(变量类型)由标头标志给出。当我使用 cfitsio 库 [http://heasarc.gsfc.nasa.gov/fitsio/] 读取其中一张图像时,我得到一个包含图像所有像素的 char 数组:
char* array = new char[npix*bytepix]; // bytepix is the number of bytes per pixel
fits_read_img(infptr, datatype, first, npix, &nulval, lArray, &anynul, &status);
然后我可以通过类型转换获得像素的“真实”值。IE 来获取 32 位整数的第 i 个像素的值,我会这样做:
int32_t pixelValue = ((int32_t*) lArray)[i];
我想知道一般来说最紧凑的处理方式是什么,因为我不知道编写代码时像素类型是什么。
我目前做的是这样的:
switch(bytepix){
case 1:{
int8_t *vecVal = ((int8_t*) array );
}
break;
case 2:{
int16_t *vecVal = ((int16_t*) array );
}
break;
case 4:{
int32_t *vecVal = ((int32_t*) array );
}
break;
case 8:{
int64_t *vecVal = ((int64_t*) array );
}
break;
default:
cout << "error\n";
break;
}
}
这显然是丑陋的,而且不是很灵活。
非常感谢你的帮助!