C++ 无法使用CLion(macOS)上的CImg打开.png文件

C++ 无法使用CLion(macOS)上的CImg打开.png文件,c++,macos,png,clion,cimg,C++,Macos,Png,Clion,Cimg,我尝试过包括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 ${S

我尝试过包括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.h”
使用名称空间cimg_库;
int main(){
CImg img(“lenna.png”);
int h=img.height();
int w=img.width();
int s=img.spectrum();

std::cout似乎找不到
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
复制到与可执行文件相同的目录中。

请稍候,是否尝试使用libpng打开jpeg?请尝试运行
文件lenna.png
,查看它是png还是jpeg,因为您似乎有点不确定。@MarkSetchell命令显示:lenna.png:png im年龄数据,512 x 512,8位/彩色RGB,非交错。@Kerndog73这是一个.png请在您工作的目录中运行
ls-l | pbcopy
,然后单击问题下方的
edit
。使用Cmd+V粘贴代码,然后选择新粘贴的代码,然后单击格式工具栏中的
{}
(接近粗体和斜体)将目录列表格式化为代码。谢谢。现在错误日志显示:无法识别文件“lenna.png”的格式。
add_custom_command(
      TARGET HelloWorld POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy
              ${CMAKE_SOURCE_DIR}/lenna.png
              ${CMAKE_BINARY_DIR}/lenna.png
)