cimg不会加载lenna图像

时间:2017-03-16 23:04:25

标签: c++ cimg

我正在使用vs2015,创建了一个win32 c ++控制台应用 这给了一个纯粹的原生c ++应用程序,而我有一些其他的例子。 这个演示代码不起作用,问题接着加载了lenna.png或lenna.jpg

每次出现错误时都无法识别图像文件。 (我甚至使用原始的lenna来自维基百科),但它不能用于某些未知的原因,排除路径问题,我甚至将lenna放在“d:\\ lenna.jpg”。

我不知道为什么它不起作用,任何想法?

cimg刚刚过去,并不认识这些日子里的jpg吗?

#include "CImg.h"
#include "stdafx.h"
using namespace cimg_library;

int main() {
 CImg<unsigned char> image("D:\\CODE\\Cimg-prj\\PGT\\Debug\\Lenna.png"), visu(500,400,1,3,0);
 const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };
 image.blur(2.5);
 CImgDisplay main_disp(image,"Click a point"), draw_disp(visu,"Intensity profile");
 while (!main_disp.is_closed() && !draw_disp.is_closed()) {
  main_disp.wait();
  if (main_disp.button() && main_disp.mouse_y()>=0) {
   const int y = main_disp.mouse_y();
   visu.fill(0).draw_graph(image.get_crop(0,y,0,0,image.width()-1,y,0,0),red,1,1,0,255,0);
   visu.draw_graph(image.get_crop(0,y,0,1,image.width()-1,y,0,1),green,1,1,0,255,0);
   visu.draw_graph(image.get_crop(0,y,0,2,image.width()-1,y,0,2),blue,1,1,0,255,0).display(draw_disp);
  }
 }
return 0;
}

我得到的错误(所有输出):

无效参数 - “C:\ Users \ Peter \ AppData \ Local \ Temp \ kY6GW46A.pnm” 'gm.exe'无法识别为内部或外部命令, 可操作程序或批处理文件。 参数无效 - “C:\ Users \ Peter \ AppData \ Local \ Temp \ as88yC80.pnm” 'gm.exe'无法识别为内部或外部命令, 可操作程序或批处理文件。 参数无效 - “C:\ Users \ Peter \ AppData \ Local \ Temp \ wa804U6G.pnm” 'gm.exe'无法识别为内部或外部命令, 可操作程序或批处理文件。

[CImg] * * * CImgIOException * * * [instance(0,0,0,0,00000000,non-shared)] CImg :: load():无法识别文件'Lenna.png'的格式。

我确信Lenna.png是一个有效的png文件 (如果我重命名其扩展名,irfranview将尝试将其重命名为png)。

由于为png正确设置项目的额外复杂性,我可能无法使用它,我下载了zlib和libpng,但不确定如何将它们添加到项目中(以及它们的一堆文件?,他们的没有像cimg这样的单个dll或.h文件,我需要添加所有这些文件???)

1 个答案:

答案 0 :(得分:0)

如果您希望CImg能够在不依赖ImageMagick的情况下加载PNG文件,您必须通过在加载CImg头文件之前定义宏来告知它;

#define cimg_use_png 1
#include "CImg.h"

您还必须链接库GDI32以及libpng和libz以压缩PNG。