2017-11-17 16 views
0

cfitsio을 사용하여 새로운 맞는 파일에 픽셀 데이터로 이미지를 작성하고 채우려고합니다. 나는 어디에서 잘못하고 있는지 모르지만 모든 데이터가 맞는 파일에 쓰여지지 않습니다. 나는 데이터를 체크 아웃하기 위해 binary vi을 사용했고 이미지 데이터가 제대로 생성되지 않았다. 나는 NASA website에서 두 번째 image HST WFPC 2 fits file을 사용했습니다. 이것은 내가 작성한 코드입니다.픽셀 데이터를 FITS 파일에 쓰기 Cfitsio

#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

코드에 무엇이 잘못된 것인지 알아 냈습니다. 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); 
    } 
}