How can I open openexr image on qt widget
-
@SGaist I also try to compile without selecting these options python lib and openexr viewer as well as in the image. python was because I could not install the "Faber" and the viewer was because I could not install the fltk tbm
-
@Nathan-Miguel said in How can I open openexr image on qt widget:
@SGaist If you have a problem with linux on linux, I would like to install linux on linux, because it is horrible to program on windows in C ++ on my opinion
Install Linux on Linux ? What do you mean by that ?
In any case, you don't really need the viewer since you want to use Qt to show the images.
-
@SGaist sorry for my keyboard and brazil, sometimes it fixes the errors alone, but what I wanted to say and if it would be easier to program this in linux and if you have how to compile windows files direct in linux. But continuing, where I can find this "FLTK_GL_LIBRARY", and about python it seems that cmake is using 2.7 and not the 3.7 to install the python boost.
CMake Warning at CMakeLists.txt: 143 (message): Â Â Viewers are currently out of order. Building anyway ILMBASE_PACKAGE_PREFIX = C: / Program Files (x86) / OpenEXR INFO, Skipping Python bindings OPENEXR_PACKAGE_PREFIX = CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please make them or make sure they are set and tested correctly in the CMake files: FLTK_GL_LIBRARY Â Â Â Â linked by target "exrdisplay" in directory C: / Git / openexr / OpenEXR_Viewers / exrdisplay Configuring incomplete, errors occurred! See also "C: /Git/openexr/build/CMakeFiles/CMakeOutput.log".
-
@SGaist I've been able to compile all but that's missing so I can finish compiling Kimageformat, "https://api.kde.org/frameworks/karchive/html/index.html"
Could not set up the appstream test. appstreamcli is missing.
Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
Could NOT find LibLZMA (missing: LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY LIBLZMA_HAS_AUTO_DECODER LIBLZMA_HAS_EASY_ENCODER LIBLZMA_HAS_LZMA_PRESET)
The following OPTIONAL packages have been found:* Qt5Network
- The following REQUIRED packages have been found:
* ECM (required version> = 5.53.0), Extra CMake Modules., Https://projects.kde.org/projects/kdesupport/extra-cmake-modules
 * ZLIB, Support for gzip compressed files and data streams, http://www.zlib.net
   Required by the core KDE libraries and some critical kioslaves
 * Qt5Core- The following features have been disabled:
* QCH, API documentation in QCH format (for eg Qt Assistant, Qt Creator & KDevelop)
- The following OPTIONAL packages have not been found:
* LibLZMA, Support for xz compressed files and data streams, http://tukaani.org/xz/
   Support for xz compressed files and data streams- The following RECOMMENDED packages have not been found:
* BZip2, Support for BZip2 compressed files and data streams, https://sourceware.org/bzip2/
   Support for BZip2 compressed files and data streamsConfiguring done
Generating done -
@Nathan-Miguel said in How can I open openexr image on qt widget:
but how can I include this in my project
http://doc.qt.io/qt-5/third-party-libraries.html
http://doc.qt.io/qtcreator/creator-project-qmake-libraries.html -
You don't have to link against them. They are plugins that will be loaded at run time.
You may have to add a call to QCoreApplication::addLibraryPath for your application to find them.
-
@SGaist I was able to make cmake find them but I still have an error compiling openexr's ".lib"
CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj): In function `K_IStream::read(char*, int)': C:/Git/kimageformats/src/imageformats/exr.cpp:61: undefined reference to `Iex_2_3::throwErrnoExc(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj): In function `EXRHandler::read(QImage*)': C:/Git/kimageformats/src/imageformats/exr.cpp:169: undefined reference to `Imf_2_3::globalThreadCount()' C:/Git/kimageformats/src/imageformats/exr.cpp:169: undefined reference to `Imf_2_3::RgbaInputFile::RgbaInputFile(Imf_2_3::IStream&, int)' C:/Git/kimageformats/src/imageformats/exr.cpp:170: undefined reference to `Imf_2_3::RgbaInputFile::dataWindow() const' C:/Git/kimageformats/src/imageformats/exr.cpp:178: undefined reference to `Imf_2_3::RgbaInputFile::setFrameBuffer(Imf_2_3::Rgba*, unsigned long long, unsigned long long)' C:/Git/kimageformats/src/imageformats/exr.cpp:179: undefined reference to `Imf_2_3::RgbaInputFile::readPixels(int, int)'C:/Git/kimageformats/src/imageformats/exr.cpp:169: undefined reference to `Imf_2_3::RgbaInputFile::~RgbaInputFile()' C:/Git/kimageformats/src/imageformats/exr.cpp:169: undefined reference to `Imf_2_3::RgbaInputFile::~RgbaInputFile()' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj): In function `EXRHandler::canRead(QIODevice*)': C:/Git/kimageformats/src/imageformats/exr.cpp:212: undefined reference to `Imf_2_3::isImfMagic(char const*)' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj): In function `Iex_2_3::InputExc::InputExc(char const*)': C:/PROGRA~1/OpenEXR/include/OpenEXR/IexBaseExc.h:156: undefined reference to `Iex_2_3::BaseExc::BaseExc(char const*)' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj): In function `Iex_2_3::InputExc::~InputExc()': C:/PROGRA~1/OpenEXR/include/OpenEXR/IexBaseExc.h:156: undefined reference to `Iex_2_3::BaseExc::~BaseExc()' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj): In function `K_IStream::K_IStream(QIODevice*, QByteArray const&)': C:/Git/kimageformats/src/imageformats/exr.cpp:40: undefined reference to `Imf_2_3::IStream::IStream(char const*)' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj):exr.cpp:(.rdata$_ZTV9K_IStream[_ZTV9K_IStream]+0x20): undefined reference to `Imf_2_3::IStream::isMemoryMapped() const' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj):exr.cpp:(.rdata$_ZTV9K_IStream[_ZTV9K_IStream]+0x30): undefined reference to `Imf_2_3::IStream::readMemoryMapped(int)' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj): In function `K_IStream::~K_IStream()': C:/Git/kimageformats/src/imageformats/exr.cpp:36: undefined reference to `Imf_2_3::IStream::~IStream()' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj):exr.cpp:(.rdata$_ZTVN7Iex_2_38InputExcE[_ZTVN7Iex_2_38InputExcE]+0x20): undefined reference to `Iex_2_3::BaseExc::what() const' CMakeFiles\kimg_exr.dir/objects.a(exr.cpp.obj):exr.cpp:(.rdata$.refptr._ZN4half8_toFloatE[.refptr._ZN4half8_toFloatE]+0x0): undefined reference to `half::_toFloat' collect2.exe: error: ld returned 1 exit status mingw32-make.exe[2]: *** [src\imageformats\CMakeFiles\kimg_exr.dir\build.make:107: bin/imageformats/kimg_exr.dll] Error 1 mingw32-make.exe[1]: *** [CMakeFiles\Makefile2:200: src/imageformats/CMakeFiles/kimg_exr.dir/all] Error 2 mingw32-make.exe: *** [Makefile:140: all] Error 2
-
Can you check in which OpenEXR library you have these symbols ? It's likely the llmlmf library but better double check.
-
I didn't meant you are missing a library, just wondering which one contains the missing symbols and thus if you are linking against it.
-
@SGaist The log says that "moc_predefs.h" is giving the library error to generate kimg_exr.dll, more briefly, but what can I do to correct it, I tried to switch between VS and mingw
[ 1%] Automatic MOC for target kimg_exr
AutoMoc subprocess error
The content generation command for "moc_predefs.h" failed.
Command
C:/Qt/Tools/mingw730_64/bin/g++.exe -dM -E -c "C:/Program Files/CMake/share/cmake-3.13/Modules/CMakeCXXCompilerABI.cpp" -IC:/Git/kimageformats/build/src/imageformats -IC:/Git/kimageformats/src/imageformats -IC:/Qt/5.12.0/mingw73_64/include -IC:/Qt/5.12.0/mingw73_64/include/QtGui -IC:/Qt/5.12.0/mingw73_64/include/QtANGLE -IC:/Qt/5.12.0/mingw73_64/include/QtCore -IC:/Qt/5.12.0/mingw73_64/./mkspecs/win32-g++ "-IC:/Program Files/OpenEXR/include/OpenEXR" -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_FROM_BYTEARRAY -DQT_NO_CAST_TO_ASCII -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_NO_SIGNALS_SLOTS_KEYWORDS -DQT_NO_URL_CAST_FROM_STRING -DQT_USE_QSTRINGBUILDER -DUNICODE -DWIN32_LEAN_AND_MEAN -DWINVER=0x0600 -D_CRT_NONSTDC_NO_DEPRECATE -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D_UNICODE -D_USE_MATH_DEFINES -D_WIN32_IE=0x0600 -D_WIN32_WINNT=0x0600 -DWIN32
Output
src\imageformats\CMakeFiles\kimg_exr_autogen.dir\build.make:56: recipe for target 'src/imageformats/CMakeFiles/kimg_exr_autogen' failed mingw32-make.exe[2]: *** [src/imageformats/CMakeFiles/kimg_exr_autogen] Error 1 CMakeFiles\Makefile2:569: recipe for target 'src/imageformats/CMakeFiles/kimg_exr_autogen.dir/all' failed mingw32-make.exe[1]: *** [src/imageformats/CMakeFiles/kimg_exr_autogen.dir/all] Error 2 Makefile:139: recipe for target 'all' failed mingw32-make.exe: *** [all] Error 2
-
You can't mix and match C++ libraries built with VS and MinGW, you have to always use the same compiler.
-
I tried to build it myself but I must admit I too struggle with getting openexr to link. I will post my progress below anyway to make it more accessible to other people to try and fix this. The commands should create a zip file containing each dependency and a zip file containing the KDE API libraries but I can't get the final link over the line
The series of commands I used can be replicated to build all the dependencies and the library (as you can see, I built with Qt5.12 on MSVC 2015):
set cmake_path=C:\Program Files\CMake\bin set 7zip_path=C:\Program Files\7-Zip set git_path=C:\Program Files\Git\bin set qt_path=C:\Qt\5.12\msvc2015_64 set curl_path=C:\libcurl\bin set compiler_path=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC set comp_platform=amd64 set use_mingw=false set originalWD=%CD% set PATH=%cmake_path%;%git_path%;%curl_path%;%7zip_path%;%PATH% call "%qt_path%\bin\qtenv2.bat" cd %originalWD% echo on if %use_mingw%==true set PATH=%compiler_path%;%PATH% if %use_mingw%==false call "%compiler_path%\vcvarsall.bat" %comp_platform% if %use_mingw%==true (set CMAKEGENERATOR="MinGW Makefiles") else (set CMAKEGENERATOR="NMake Makefiles") mkdir .\bzip2src && cd .\bzip2src curl -k -L https://sourceforge.net/projects/gnuwin32/files/bzip2/1.0.5/bzip2-1.0.5-src.zip --output bzip2.zip 7z x bzip2.zip del /F /Q bzip2.zip cd src\bzip2\1.0.5\bzip2-1.0.5\ mkdir build && cd build echo cmake_minimum_required(VERSION 3.5) >> ..\CMakeLists.txt echo project(bzip2 C) >> ..\CMakeLists.txt echo set(bzip2_VERSION 1.0.5) >> ..\CMakeLists.txt echo set(bzip2_SRCS >> ..\CMakeLists.txt echo bzlib.c >> ..\CMakeLists.txt echo blocksort.c >> ..\CMakeLists.txt echo huffman.c >> ..\CMakeLists.txt echo crctable.c >> ..\CMakeLists.txt echo compress.c >> ..\CMakeLists.txt echo decompress.c >> ..\CMakeLists.txt echo randtable.c >> ..\CMakeLists.txt echo ) >> ..\CMakeLists.txt echo add_library(bzip2 SHARED ${bzip2_SRCS}) >> ..\CMakeLists.txt echo install(TARGETS bzip2 >> ..\CMakeLists.txt echo EXPORT bzip2 >> ..\CMakeLists.txt echo RUNTIME DESTINATION bin COMPONENT library >> ..\CMakeLists.txt echo LIBRARY DESTINATION lib COMPONENT library >> ..\CMakeLists.txt echo ARCHIVE DESTINATION lib COMPONENT library >> ..\CMakeLists.txt echo ) >> ..\CMakeLists.txt echo install(FILES bzlib.h >> ..\CMakeLists.txt echo DESTINATION include >> ..\CMakeLists.txt echo COMPONENT headers >> ..\CMakeLists.txt echo ) >> ..\CMakeLists.txt cmake -G %CMAKEGENERATOR% -DCMAKE_INSTALL_PREFIX=../../../../../../bzip2 -DCMAKE_BUILD_TYPE=RELEASE ../ cmake --build . cmake --build . --target install cd ..\..\..\..\..\..\ set PATH=%CD%\bzip2;%PATH% 7z a -tzip bzip2.zip .\bzip2\* mkdir .\liblzma && cd .\liblzma curl -k -L https://tukaani.org/xz/xz-5.2.4-windows.zip --output liblzma.zip 7z x liblzma.zip del /F /Q liblzma.zip if %use_mingw%==true (ren bin_i686 lib) else (mkdir lib && mkdir bin) if %use_mingw%==false curl -k -L https://tukaani.org/xz/xz-5.2.4.tar.gz --output liblzma.tar.gz if %use_mingw%==false 7z x liblzma.tar.gz if %use_mingw%==false del /F /Q liblzma.tar.gz if %use_mingw%==false 7z x liblzma.tar if %use_mingw%==false del /F /Q liblzma.tar if %use_mingw%==false cd xz-5.2.4\windows\vs2013 if %comp_platform%==x86 if %use_mingw%==false msbuild xz_win.sln /property:Configuration=Release /property:Platform=Win32 && xcopy /Y /I /K Release\Win32\liblzma_dll\*.dll ..\..\..\bin && xcopy /Y /I /K Release\Win32\liblzma_dll\*.lib ..\..\..\lib if %comp_platform%==amd64 if %use_mingw%==false msbuild xz_win.sln /property:Configuration=Release /property:Platform=x64 && xcopy /Y /I /K Release\x64\liblzma_dll\*.dll ..\..\..\bin && xcopy /Y /I /K Release\x64\liblzma_dll\*.lib ..\..\..\lib if %use_mingw%==false cd ..\..\..\ set PATH=%CD%;%PATH% cd ..\ 7z a -tzip liblzma.zip .\liblzma\include\ 7z a -tzip liblzma.zip .\liblzma\lib\ if %use_mingw%==false 7z a -tzip liblzma.zip .\liblzma\bin\ git clone https://github.com/madler/zlib.git zlibBuild cd zlibBuild mkdir .\build && cd .\build cmake -G %CMAKEGENERATOR% -DCMAKE_INSTALL_PREFIX=../../zlib -DCMAKE_BUILD_TYPE=RELEASE ../ cmake --build . cmake --build . --target install cd ..\..\ 7z a -tzip zlib.zip .\zlib\* set PATH=%CD%\zlib;%PATH% git clone https://github.com/openexr/openexr.git OpenEXRsrc cd OpenEXRsrc mkdir .\build && cd .\build cmake -G %CMAKEGENERATOR% -DOPENEXR_NAMESPACE_VERSIONING=OFF -DOPENEXR_BUILD_PYTHON_LIBS=OFF -DCMAKE_DEBUG_POSTFIX=d -DOPENEXR_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=../../OpenEXR -DCMAKE_BUILD_TYPE=DEBUG ../ cmake --build . cmake --build . --target install cmake -G %CMAKEGENERATOR% -DOPENEXR_NAMESPACE_VERSIONING=OFF -DOPENEXR_BUILD_PYTHON_LIBS=OFF -DOPENEXR_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=../../OpenEXR -DCMAKE_BUILD_TYPE=RELEASE ../ cmake --build . cmake --build . --target install cd ..\..\ 7z a -tzip OpenEXR.zip .\OpenEXR\* set PATH=%CD%\OpenEXR;%PATH% git clone git://anongit.kde.org/extra-cmake-modules ECM cd ECM mkdir .\build && cd .\build cmake -G %CMAKEGENERATOR% -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=../../ECMbuild -DCMAKE_BUILD_TYPE=RELEASE ../ cmake --build . cmake --build . --target install cd ..\..\ set PATH=%CD%\ECMbuild;%PATH% git clone git://anongit.kde.org/karchive.git KArchive cd KArchive mkdir .\build && cd .\build cmake -G %CMAKEGENERATOR% -DBUILD_TESTING=OFF -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX=../../KDEAPI -DCMAKE_BUILD_TYPE=DEBUG ../ cmake --build . cmake --build . --target install cmake -G %CMAKEGENERATOR% -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=../../KDEAPI -DCMAKE_BUILD_TYPE=RELEASE ../ cmake --build . cmake --build . --target install cd ..\..\ set PATH=%CD%\KDEAPI;%PATH% git clone git://anongit.kde.org/kimageformats.git KImageFormats cd KImageFormats mkdir .\build && cd .\build cmake -G %CMAKEGENERATOR% -DBUILD_TESTING=OFF -DCMAKE_DEBUG_POSTFIX=d -DCMAKE_INSTALL_PREFIX=../../KDEAPI -DCMAKE_BUILD_TYPE=DEBUG ../ cmake --build . cmake --build . --target install cmake -G %CMAKEGENERATOR% -DBUILD_TESTING=OFF -DCMAKE_INSTALL_PREFIX=../../KDEAPI -DCMAKE_BUILD_TYPE=RELEASE ../ cmake --build . cmake --build . --target install cd ..\..\ 7z a -tzip KDElib.zip .\KDEAPI\*
You'll need to have installed 7-zip, curl, CMake and git.
You'll need to change the initial lines to match your system:set cmake_path=C:\Program Files\CMake\bin
: path to the CMake executableset 7zip_path=C:\Program Files\7-Zip
: path to the 7-zip executableset git_path=C:\Program Files\Git\bin
: path to the git executableset qt_path=C:\Qt\5.12\msvc2015_64
: path to your qt directoryset curl_path=C:\libcurl\bin
: path to the curl executableset compiler_path=C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC
: path to the compiler binary folderset comp_platform=amd64
can be eitheramd64
orx86
determines if the build is 64 or 32 bitset use_mingw=false
set to true if you use MinGW or false if you use MSVC
One final thing, if you use MinGW you might need to adjust the line
if %use_mingw%==true (ren bin_i686 lib) else (mkdir lib && mkdir bin)
changingbin_i686
to the name of the folder containing the libraries that match your compiler (there are 3 available) -
@Nathan-Miguel said in How can I open openexr image on qt widget:
but how can I include it in qt
I imagine you mean Qt Creator. Right click on your project -> add library -> external library -> select the .lib file and the include directory (the d suffix should be detected automatically).
-
@VRonin even the libs was fine, but in question my qt still does not open and I still have some doubts,
- Do I need to add the openexr and libs includes?
- Can I continue using the QPixelmap label?
- In kimageformat did not come any include in .h, do I have to use .desktop or use the openexr includes to open the image?
This is the function I'm using to open an image
void MainWindow::on_actionOpen_Image_triggered() { QString filter = "Imagens (*.bmp *.cur *.gif *icns *.ico *.jpg *.jpeg *.pdm *.pgm *.png *.ppm *.svg *.tga *.tif *.tiff *.wbmp *.webp *.xmb *.xpm) ;; All Files (*.*)"; QString filename = QFileDialog::getOpenFileName(this, "Open", QDir::homePath(), filter); QFile file(filename); QImage image(filename); if (!image.isNull()) { QImage image(filename); image = image.scaledToWidth(ui->labelimg->width(), Qt::SmoothTransformation); image = image.scaledToWidth(ui->labelimg->height(), Qt::SmoothTransformation); ui->labelimg->setPixmap(QPixmap::fromImage(image)); } else { QMessageBox::warning(this, "Error", "Image can not open"); filename = ""; } }