我正在使用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文件,我需要添加所有这些文件???)
答案 0 :(得分:0)
如果您希望CImg能够在不依赖ImageMagick的情况下加载PNG文件,您必须通过在加载CImg头文件之前定义宏来告知它;
#define cimg_use_png 1
#include "CImg.h"
您还必须链接库GDI32以及libpng和libz以压缩PNG。