Ubuntu 下自定义 cxImage 界面的正确思路
先明确概念
推荐方案 Qt 示例
cmake_minimum_required(VERSION 3.16)
project(CxImageViewer LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Widgets REQUIRED)
# 若使用发行版包:find_package(PkgConfig REQUIRED)
# pkg_check_modules(CXIMAGE REQUIRED cximage)
add_executable(viewer main.cpp)
target_link_libraries(viewer Qt5::Widgets ${CXIMAGE_LIBRARIES})
# 若使用发行版包:target_include_directories(viewer PRIVATE ${CXIMAGE_INCLUDE_DIRS})
# 若使用源码构建:target_include_directories(viewer PRIVATE /usr/local/include/cximage)
# 若使用源码构建:target_link_libraries(viewer /usr/local/lib/libcximage.so)
#include <QApplication>
#include <QLabel>
#include <QVBoxLayout>
#include <QFileDialog>
#include <QPixmap>
// 若使用源码构建,请取消下一行注释并包含相应头文件路径
// #include "ximage.h" // 或 #include <cximage.h>
// 使用命名空间(若头文件使用 cximage 命名空间)
// using namespace cximage;
// 简易封装:用 cxImage 解码到 QImage(示例,需按你的头文件与库实际 API 调整)
QImage loadWithCxImage(const QString& path) {
// 伪代码示意:
// CxImage img;
// if (img.Load(path.toUtf8().constData(), CXIMAGE_FORMAT_UNKNOWN)) {
// // 根据 img 的像素格式构造 QImage(例如 RGBA/RGB)
// // return QImage(...);
// }
// return QImage();
return QImage(path); // 回退:Qt 自带解码
}
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QWidget window;
QVBoxLayout *layout = new QVBoxLayout(&window);
QLabel *label = new QLabel(&window);
label->setAlignment(Qt::AlignCenter);
layout->addWidget(label);
QString file = QFileDialog::getOpenFileName(nullptr,
QObject::tr("Open Image"), QString(),
QObject::tr("Images (*.png *.jpg *.jpeg *.bmp *.gif)"));
if (!file.isEmpty()) {
QImage qimg = loadWithCxImage(file);
if (!qimg.isNull()) {
label->setPixmap(QPixmap::fromImage(qimg).scaled(
label->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
} else {
label->setText("Failed to load: " + file);
}
}
window.resize(800, 600);
window.show();
return app.exec();
}
从源码构建与集成 cxImage
常见误区与替代选择