C++ cimg无法识别tiff图像

C++ cimg无法识别tiff图像,c++,png,tiff,cimg,phash,C++,Png,Tiff,Cimg,Phash,我正在使用pHash分析使用cimg的图像,即使我有libpng12.dll、libpng.lib、libtiff3.dll和libtiff.lib支持这些文件,我也无法加载和分析tiff图像或PNG。当我将一个pHash函数传递给tiff图像时,它不会将其识别为tif,并继续尝试使用magick++加载它,我不想使用magick++ 你能帮我找出哪里出了问题吗 在调试完所有东西之后。。我意识到图像没有通过“if(tiff)”,因此没有对其进行任何处理 以下是检查文件是否为tiff的代码: TI

我正在使用pHash分析使用cimg的图像,即使我有libpng12.dll、libpng.lib、libtiff3.dll和libtiff.lib支持这些文件,我也无法加载和分析tiff图像或PNG。当我将一个pHash函数传递给tiff图像时,它不会将其识别为tif,并继续尝试使用magick++加载它,我不想使用magick++

你能帮我找出哪里出了问题吗

在调试完所有东西之后。。我意识到图像没有通过“if(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);
TIFF*tif=TIFFOpen(文件名,“r”);
如果(tif){
无符号整数nb_图像=0;
do++nb_图像;while(TIFFReadDirectory(tif));
如果(nfirst_frame>=nb|u图像(nlast_frame!=~0U&&nlast_frame>=nb_图像))
cimg::warn(\u cimg\u实例
“加载\u tiff():文件“%s”包含%u个图像,而指定的帧范围为[%u,%u](步骤%u)。”,
例如,,
文件名、nb_图像、nfirst_帧、nlast_帧、nstep_帧);
如果(nfirst_frame>=nb_images)返回assign();
如果(nlast_帧>=nb_图像)nlast_帧=nb_图像-1;
TIFF设置目录(tif,0);
CImg框架;
对于(无符号整数l=N第一帧;l|宽度|帧。|高度>|高度|帧。|频谱>|频谱)
调整大小(cimg::max(帧._宽度,_宽度),cimg::max(帧._高度,_高度),-100,cimg::max(帧._光谱,_光谱),0);
绘制图像(0,0,(l-N第一帧)/N第二帧,帧);
}
TIFFClose(tif);

TIFFOpen
失败时,您应该进行检查,例如查看出了什么问题(如参考页中所述)。或者你用
TIFFSetErrorHandler
设置了一个错误处理函数来打印错误。我对这个很陌生,我注意到cimg没有使用TIFFERROR,但我想我可以编写一个main来测试它,并使用TIFFERROR。你能指导我如何做吗?好的,我再次查看了我的代码,似乎我的libtiff3.dll是有些方法已损坏,函数调用不正确。。代码一进入TIFFReadDirectory就会崩溃。如果有人能为我提供一个适合tiff和png的dll和lib文件,我将不胜感激。非常感谢。