【问题标题】:Cannot Open .png file with CImg on CLion (macOS)无法在 CLion (macOS) 上使用 CImg 打开 .png 文件
【发布时间】:2020-03-08 19:56:07
【问题描述】:

我尝试过包含 libpng16/png.h 和 #define cimg_use_png,但它们都没有解决错误。另外,我在同一目录中有main.cpp、lenna.jpg 和CImg.h。

CMakeLists.txt:

cmake_minimum_required(VERSION 3.6)
project(HelloWorld)

set(CMAKE_CXX_STANDARD 17)

set(SOURCE_FILES main.cpp)
add_executable(HelloWorld ${SOURCE_FILES})

set(YOU_NEED_X11 1)
set(YOU_NEED_PNG 1)

if (${YOU_NEED_PNG} EQUAL 1)
    message(STATUS "Looking for libpng...")
    find_package(PNG REQUIRED)
    include_directories(${PNG_INCLUDE_DIR})
    target_link_libraries (HelloWorld ${PNG_LIBRARY})
    target_compile_definitions(HelloWorld PRIVATE cimg_use_png=1)
endif()

if (${YOU_NEED_X11} EQUAL 1)
    message(STATUS "Looking for X11...")
    find_package(X11 REQUIRED)
    include_directories(${X11_INCLUDE_DIR})
    target_link_libraries(HelloWorld ${X11_LIBRARIES})
else()
    target_compile_definitions(HelloWorld PRIVATE cimg_display=0)
endif()

main.cpp:

#include <iostream>
#include "CImg.h"

using namespace cimg_library;

int main() {

    CImg<unsigned char> img("lenna.png");

    int h = img.height();
    int w = img.width();
    int s = img.spectrum();

    std::cout << "h: " << h << " w: " << w << " s: " << s << std::endl;

    return 0;
}

错误:

[CImg] *** CImgIOException *** [instance(0,0,0,0,0x0,non-shared)] CImg<unsigned char>::load(): Failed to open file 'lenna.png'.
libc++abi.dylib: terminating with uncaught exception of type cimg_library::CImgIOException: [instance(0,0,0,0,0x0,non-shared)] CImg<unsigned char>::load(): Failed to open file 'lenna.png'.

Process finished with exit code 6

【问题讨论】:

  • 等一下,您是在尝试使用 libpng 打开 jpeg 吗?
  • 尝试运行file lenna.png 看看它是PNG 还是JPEG,因为您似乎有点不确定。
  • @MarkSetchell 命令显示:lenna.png:PNG 图像数据,512 x 512,8 位/彩色 RGB,非隔行扫描
  • @Kerndog73 这是一个 .png
  • 请在您工作的目录下运行ls -l | pbcopy,然后在您的问题下点击edit。使用 Cmd+V 粘贴代码,然后选择新粘贴的代码并单击格式化工具栏中的{}(靠近粗体斜体)以格式化目录作为代码列出。谢谢。

标签: c++ macos png clion cimg


【解决方案1】:

似乎找不到lenna.png。相对路径是相对于包含可执行文件的目录的。这意味着如果可执行文件位于cmake-build-debug/HelloWorld 并且您尝试打开lenna.png,则会打开位于cmake-build-debug/lenna.png 的文件。这意味着您应该手动将 lenna.png 复制到 cmake-build-debug(我不推荐这样做)或让 CMake 为您完成。

将此添加到您的 CMakeLists.txt 文件中。

add_custom_command(
      TARGET HelloWorld POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy
              ${CMAKE_SOURCE_DIR}/lenna.png
              ${CMAKE_BINARY_DIR}/lenna.png
)

这将导致每次编译可执行文件时将lenna.png 复制到与您的可执行文件相同的目录中。

【讨论】:

  • 现在错误日志显示:无法识别文件'lenna.png'的格式。
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 2011-07-07
  • 2021-01-18
  • 2021-06-26
  • 2021-04-13
  • 1970-01-01
  • 2014-02-08
  • 2011-04-29
相关资源
最近更新 更多