如何从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))。
我正在尝试使用 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))。