Я использую pHash для анализа изображений, использующих cimg, и я не могу загружать и анализировать изображения tiff или pngs, хотя у меня есть libpng12.dll, libpng.lib, libtiff3.dll и libtiff.lib, которые поддерживают эти файлы. когда я передаю одну из функций pHash в виде tiff-изображения, он не идентифицирует его как tif-файл и продолжает пытаться загрузить его с помощью magick ++, а я не хочу использовать magick ++.
не могли бы вы помочь мне выяснить, где я иду не так?
после отладки все .. я понял, что изображение не проходит «если (TIFF)», и поэтому ничего не делается с ним.
Вот код, где он проверяет, является ли файл TIFF:
TIFF *tif = TIFFOpen(filename,"r");
if (tif) {
unsigned int nb_images = 0;
do ++nb_images; while (TIFFReadDirectory(tif));
if (nfirst_frame>=nb_images || (nlast_frame!=~0U && nlast_frame>=nb_images))
cimg::warn(_cimg_instance
"load_tiff() : File '%s' contains %u image(s) while specified frame range is [%u,%u] (step %u).",
cimg_instance,
filename,nb_images,nfirst_frame,nlast_frame,nstep_frame);
if (nfirst_frame>=nb_images) return assign();
if (nlast_frame>=nb_images) nlast_frame = nb_images-1;
TIFFSetDirectory(tif,0);
CImg<T> frame;
for (unsigned int l = nfirst_frame; l<=nlast_frame; l+=nstep_frame) {
frame._load_tiff(tif,l);
if (l==nfirst_frame) assign(frame._width,frame._height,1+(nlast_frame-nfirst_frame)/nstep_frame,frame._spectrum);
if (frame._width>_width || frame._height>_height || frame._spectrum>_spectrum)
resize(cimg::max(frame._width,_width),cimg::max(frame._height,_height),-100,cimg::max(frame._spectrum,_spectrum),0);
draw_image(0,0,(l-nfirst_frame)/nstep_frame,frame);
}
TIFFClose(tif);
Задача ещё не решена.
Других решений пока нет …