我正在尝试使用cfitsio
将带有像素数据的图像填充到新拟合文件中。我不确定我在哪里做错了,但所有的数据都没有被写入fit文件。我使用binary vi
检查数据并且未正确创建图像数据。我使用了来自image HST WFPC 2 fits file的第二个NASA website。这是我写的代码:
#include <string.h>
#include <stdio.h>
#include "fitsio.h"
int main() {
fitsfile *fptr;
int status = 0, i;
fits_open_file(&fptr, "WFPC2ASSNu5780205bx.fits", READONLY, &status);
long naxes[2];
fits_get_img_size(fptr, 3, naxes, &status);
fitsfile *ofptr;
fits_create_file(&ofptr, "o_nasa.fits", &status);
fits_copy_header(fptr, ofptr, &status);
long fp[2] = {1, 1};
long nelements = naxes[0];
float arr[nelements];
for (i = 0; i < nelements; i++) {
arr[i] = 100;
}
int ii, jj, kk;
for (ii = 1; ii <= naxes[0]; ii++) {
for (jj = 1; jj <= naxes[1]; jj++) {
fits_write_pix(ofptr, TFLOAT, fp, nelements, arr, &status); // this is not working
}
}
fits_close_file(ofptr, &status);
fits_close_file(fptr, &status);
return status;
}
答案 0 :(得分:0)
我发现代码有什么问题。我刚刚发布了答案,因为似乎没有很多社区工作CFITSIO
。带有变量ii, jj
的double for循环中的代码是错误的。我认为fp
是指向图像数组开始写入的第一个像素数组,它用于启动整个迭代的位置,而write_pix
在整个迭代中使用它来知道写入的位置。我的代码也试图编写/更新1, 1 pixel
,它似乎是NULL
。正确的代码是:
for (fp[1] = 1; fp[1] <= naxes[0]; fp[1]++) {
for (fp[0] = 1; fp[0] <= naxes[1]; fp[0]++) {
fits_write_pix(ofptr, TFLOAT, fp, nelements, arr, &status);
}
}