Как получить данные изображения из CCfits

Я пытаюсь читать и писать FITS изображения с использованием C ++. Я пытаюсь использовать CCfits, но я не могу понять, как получить буфер пикселей. Я использовал пример кода в документации, чтобы успешно прочитать изображение и распечатать основной заголовок, но я получаю сообщение об ошибке при попытке прочитать массив двоичных данных. Вот код, приведенный в примере 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и код строится нормально, если я закомментирую строку с читать() функция.

Кто-нибудь знает, как использовать эту библиотеку?

У кого-нибудь есть рабочий пример?

0

Решение

Похоже, что CCfits на самом деле не работает так, как рекламируется. читать() Функция задокументирована и даже объявлена ​​в заголовочном файле, но ее реализация отсутствует.

Просто используйте cfitsio, все работает.

1

Другие решения

Я обнаружил, что для правильной работы CCfits вам нужно использовать #include <CCfits>, Включая только файлы, которые вы считать вам не нужно тянуть в реализации функций.

Я также обнаружил, что вам нужно немного изменить код и указать значение ненулевой длины (по крайней мере, для более новой версии gcc (8.x.y)).

0

По вопросам рекламы [email protected]