如何从CCfits获取图像数据

How to get image data from CCfits

我正在尝试使用 C++ 读写 FITS 图像。我正在尝试使用 CCfits,但我不知道如何获取像素缓冲区。我已经使用文档中的示例代码成功读取图像并打印出主要 header,但是当我尝试读取二进制数据数组时出现错误。这是CCfits示例中提供的代码(我已经指出了错误所在)。

int readImage()
{
    std::auto_ptr<FITS> pInfile(new FITS("atestfil.fit",Read,true));
    PHDU& image = pInfile->pHDU();
    std::valarray<unsigned long>  contents;

    // read all user-specifed, coordinate, and checksum keys in the image
    image.readAllKeys();
    image.read(contents); // !!!ERROR HERE!!!

    // this doesn’t print the data, just header info.
    std::cout << image << std::endl;
    long ax1(image.axis(0));
    long ax2(image.axis(1));

    for (long j = 0; j < ax2; j+=10)
    {
        std::ostream_iterator<short> c(std::cout,"\t");
        std::copy(&contents[j*ax1], &contents[(j+1)*ax1-1], c);
        std::cout << '\n';
    {
    std::cout << std::endl;
    return 0;
}

make 返回的错误是:

undefined reference to `void CCfits::PHDU::read<unsigned long>(std::valarray<unsigned long>&)'

事实上,根据我下载的源代码文档,没有带有该签名的函数。所以我尝试了记录的所有其他签名,但我仍然得到基本相同的错误(只是提到了不同的签名)。

事实上,我打开了 PHDU.h 的本地副本并找到了这一行:

 template<typename S>
        void read(std::valarray<S>& image) ;

我包括 -lcfitsio -lCCfits,如果我用 read() 函数注释掉该行,代码构建得很好。

有人 body 知道如何使用这个库吗?

有人有工作示例吗?

CCfits 似乎并没有像宣传的那样有效。 read()函数有文档,甚至在头文件中声明,但没有实现。

只需使用 cfitsio,就可以了。

我发现,为了让 CCfits 正常工作,您需要使用 #include <CCfits>。仅包含您认为需要的文件并不会引入函数的实现。

我还发现您需要稍微修改一下代码,并指定一个非零长度的 valarray(至少对于较新的 gcc 版本 (8.x.y))。