2017-03-16 113 views
-2

我正在使用vs2015,创建了一个win32 C++控制台应用程序 这给了一个纯粹的本机C++应用程序,而我有一些其他的例子工作。 此演示代码不起作用,问题接连加载的lenna.png或lenna.jpgcimg不会加载lenna图像

每次我得到的错误,图像文件isnt识别。 (我甚至用维基百科的原始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:\用户\彼得\应用程序数据\本地的\ 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 * * * [实例(0,0,0,0,00000000,非共享)] CImg :: load():无法识别文件格式'Lenna.png' 。

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

我可能不会得到它应有的努力,建立一个正确的项目为巴新的额外的复杂性,我下载的zlib和libpng,但不知道如何将它们添加到项目中(和他们的一堆文件?他们没有一个dll或.h文件喜欢cimg我需要添加所有这些文件吗?)

+0

*请*缩进您的代码。 –

+0

我担心长行会变得不可读,而且由于代码很短,每行大多有1条命令,我就这样写下来。 – user3800527

+0

相信我,阅读它会更容易。如果必须分割长线。 –

回答

0

如果您希望CImg能够加载PNG文件而不依赖于ImageMagick,您必须通过定义一个宏之前加载CImg头文件;

#define cimg_use_png 1 
#include "CImg.h" 

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

+0

又如一个例子(鹦鹉的例子)我没有链接GDI32 是阅读png/jpg的必要条件吗? (顺便说一句,仍然必须测试你的答案,将确认它是否今天晚些时候工作) – user3800527

+0

到目前为止我无法使它的工作,我刚刚开始与cimg。 它不清楚明显zlib和libpng不只是一些DLL我可以添加。 你知道可能的代码示例来完成这件事。 我正在尝试为搅拌机渲染的图像创建一个新的过滤器。 我制定了图像数学,但cimg现在让我头疼 – user3800527

+0

对不起,我不使用Visual Studio或Windows - 在Linux和Mac上一切正常,并且CImg肯定不会过时。我会环顾四周,看看我能找到除GDI32以外的任何特定于Windows的东西。 –