私はC++を使用してFITS画像を扱っています。この形式は、8/16/32ビットの整数と32/64ビットの浮動小数点配列を保持できます。ピクセルサイズ(変数タイプ)は、ヘッダーフラグによって指定されて含まれます。cfitsioライブラリ[http://heasarc.gsfc.nasa.gov/fitsio/]を使用してこの画像の1つを読み取ると、画像のすべてのピクセルを保持する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;
}
}
それは明らかに醜く、あまり柔軟ではありません。
あなたの助けをどうもありがとう!