【问题标题】:cimg wont load lenna imagecimg 不会加载 lenna 图像
【发布时间】:2017-03-16 23:04:24
【问题描述】:

我正在使用 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;
}

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

Invalid Parameter - "C:\\Users\\Peter\\AppData\\Local\\Temp\\kY6GW46A.pnm"
'gm.exe' is not recognized as an internal or external command,
operable program or batch file.
Invalid Parameter - "C:\\Users\\Peter\\AppData\\Local\\Temp\\as88yC80.pnm"
'gm.exe' is not recognized as an internal or external command,
operable program or batch file.
Invalid Parameter - "C:\\Users\\Peter\\AppData\\Local\\Temp\\wa804U6G.pnm"
'gm.exe' is not recognized as an internal or external command,
operable program or batch file.

[CImg] * * * CImgIOException * * * [instance(0,0,0,0,00000000,non-shared)] CImg<float>::load(): Failed to recognize format of file 'Lenna.png'.

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

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

【问题讨论】:

  • 缩进你的代码。
  • 我担心长行会变得不可读,并且由于代码很短,每行大多只有 1 个命令,所以我这样写
  • 相信我,它会更容易阅读它的缩进。必要时拆分长行。

标签: c++ cimg


【解决方案1】:

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

#define cimg_use_png 1
#include "CImg.h"

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

【讨论】:

  • 再举一个例子(鹦鹉例子)我不需要链接 GDI32 是阅读 png / jpg 的要求吗? (顺便说一句,您的答案仍然需要测试,将在今天晚些时候确认它是否有效)
  • 到目前为止我无法让它工作,我只是从 cimg 开始。显然 zlib 和 libpng 不只是我可以添加的一些 dll。您是否知道完成此操作的示例代码。我正在尝试为搅拌机渲染的图像创建一个新的过滤器。我计算了图像数学,但 cimg 现在让我头疼
  • 抱歉,我不使用 Visual Studio 或 Windows - 在 Linux 和 Mac 上一切正常,而且 CImg 肯定不会过时。我会环顾四周,看看是否能找到除 GDI32 之外的任何特定于 Windows 的东西。
  • 也许你可以在你的问题下点击edit并添加你的错误信息。
  • 我没有使用 Visual c++,我正在使用 vs2015 做原生 c++,这更像是 linux 上的 c++,它是 cimg 本身有足够的能力来显示一些东西。 (正如我在另一个例子中看到的那样)。但那是一种奇怪的图形格式,Blender 更经常使用 png(或 jpg)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
  • 2021-05-25
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多