mirror of
https://invent.kde.org/frameworks/kimageformats.git
synced 2025-07-16 03:24:17 -04:00
Compare commits
48 Commits
v5.14.0-rc
...
v5.41.0
Author | SHA1 | Date | |
---|---|---|---|
ca67a8f342 | |||
23759d0aef | |||
bfc02ddfe3 | |||
a65b504a44 | |||
78aeee7d36 | |||
a2d0e43889 | |||
e0bd85cbc3 | |||
f16485a872 | |||
e3afec9e75 | |||
b040cf0f96 | |||
7be2757c36 | |||
a8562a8471 | |||
252b639638 | |||
b0c8c40dec | |||
1afb7681b7 | |||
740fe5df0e | |||
e4aa067bd2 | |||
9f77675d91 | |||
8a8ef69b7c | |||
95e14f8f60 | |||
1fca298a20 | |||
09b1ac5a16 | |||
7f852d241a | |||
5fdcdff6e3 | |||
60b5866b77 | |||
f42c1b7423 | |||
ede3a4a3f3 | |||
1d2aed54fa | |||
b019a2a57e | |||
a4de98aa4f | |||
172c494cff | |||
e8da107189 | |||
0ae43f7d35 | |||
36b67d38bb | |||
c1164e4eda | |||
8630653eff | |||
d4009490c5 | |||
baf894ba19 | |||
5168d097b5 | |||
6934d54417 | |||
5d7ef7c38e | |||
a68bfe27ff | |||
9304510ee3 | |||
cc219211bb | |||
f2adcb81d1 | |||
814c7a2b30 | |||
d7f457a124 | |||
69c4a4b84a |
3
.arcconfig
Normal file
3
.arcconfig
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"phabricator.uri" : "https://phabricator.kde.org/"
|
||||||
|
}
|
@ -1,9 +1,9 @@
|
|||||||
cmake_minimum_required(VERSION 2.8.12)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
|
||||||
project(KImageFormats)
|
project(KImageFormats)
|
||||||
|
|
||||||
include(FeatureSummary)
|
include(FeatureSummary)
|
||||||
find_package(ECM 5.14.0 NO_MODULE)
|
find_package(ECM 5.41.0 NO_MODULE)
|
||||||
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules")
|
set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://projects.kde.org/projects/kdesupport/extra-cmake-modules")
|
||||||
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES)
|
||||||
|
|
||||||
@ -11,15 +11,21 @@ feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKA
|
|||||||
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
|
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
|
||||||
|
|
||||||
include(KDEInstallDirs)
|
include(KDEInstallDirs)
|
||||||
include(KDEFrameworkCompilerSettings)
|
include(KDEFrameworkCompilerSettings NO_POLICY_SCOPE)
|
||||||
include(KDECMakeSettings)
|
include(KDECMakeSettings)
|
||||||
|
|
||||||
|
|
||||||
include(CheckIncludeFiles)
|
include(CheckIncludeFiles)
|
||||||
|
|
||||||
set(REQUIRED_QT_VERSION 5.3.0)
|
set(REQUIRED_QT_VERSION 5.7.0)
|
||||||
find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED NO_MODULE)
|
||||||
|
|
||||||
|
find_package(KF5Archive)
|
||||||
|
set_package_properties(KF5Archive PROPERTIES
|
||||||
|
TYPE OPTIONAL
|
||||||
|
PURPOSE "Required for the QImage plugin for Krita and OpenRaster images"
|
||||||
|
)
|
||||||
|
|
||||||
# EPS support depends on the gs utility; non-UNIX systems are unlikely to have
|
# EPS support depends on the gs utility; non-UNIX systems are unlikely to have
|
||||||
# this available in PATH
|
# this available in PATH
|
||||||
set(BUILD_EPS_PLUGIN FALSE)
|
set(BUILD_EPS_PLUGIN FALSE)
|
||||||
|
@ -61,6 +61,14 @@ kimageformats_read_tests(
|
|||||||
rgb
|
rgb
|
||||||
tga
|
tga
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (KF5Archive_FOUND)
|
||||||
|
kimageformats_read_tests(
|
||||||
|
kra
|
||||||
|
ora
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Allow some fuzziness when reading this formats, to allow for
|
# Allow some fuzziness when reading this formats, to allow for
|
||||||
# rounding errors (eg: in alpha blending).
|
# rounding errors (eg: in alpha blending).
|
||||||
kimageformats_read_tests(FUZZ 1
|
kimageformats_read_tests(FUZZ 1
|
||||||
|
BIN
autotests/read/kra/src.kra
Normal file
BIN
autotests/read/kra/src.kra
Normal file
Binary file not shown.
BIN
autotests/read/kra/src.png
Normal file
BIN
autotests/read/kra/src.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
BIN
autotests/read/ora/src.ora
Normal file
BIN
autotests/read/ora/src.ora
Normal file
Binary file not shown.
BIN
autotests/read/ora/src.png
Normal file
BIN
autotests/read/ora/src.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
@ -129,7 +129,7 @@ int main(int argc, char ** argv)
|
|||||||
foreach (QFileInfo fi, imgdir.entryInfoList()) {
|
foreach (QFileInfo fi, imgdir.entryInfoList()) {
|
||||||
int suffixPos = fi.filePath().count() - suffix.count();
|
int suffixPos = fi.filePath().count() - suffix.count();
|
||||||
QString inputfile = fi.filePath();
|
QString inputfile = fi.filePath();
|
||||||
QString expfile = fi.filePath().replace(suffixPos, suffix.count(), "png");
|
QString expfile = fi.filePath().replace(suffixPos, suffix.count(), QStringLiteral("png"));
|
||||||
QString expfilename = QFileInfo(expfile).fileName();
|
QString expfilename = QFileInfo(expfile).fileName();
|
||||||
|
|
||||||
QImageReader inputReader(inputfile, format.constData());
|
QImageReader inputReader(inputfile, format.constData());
|
||||||
|
@ -75,7 +75,7 @@ int main(int argc, char ** argv)
|
|||||||
|
|
||||||
foreach (QFileInfo fi, imgdir.entryInfoList()) {
|
foreach (QFileInfo fi, imgdir.entryInfoList()) {
|
||||||
int suffixPos = fi.filePath().count() - suffix.count();
|
int suffixPos = fi.filePath().count() - suffix.count();
|
||||||
QString pngfile = fi.filePath().replace(suffixPos, suffix.count(), "png");
|
QString pngfile = fi.filePath().replace(suffixPos, suffix.count(), QStringLiteral("png"));
|
||||||
QString pngfilename = QFileInfo(pngfile).fileName();
|
QString pngfilename = QFileInfo(pngfile).fileName();
|
||||||
|
|
||||||
QImageReader pngReader(pngfile, "png");
|
QImageReader pngReader(pngfile, "png");
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
maintainer: alexmerry
|
maintainer: alexmerry
|
||||||
description: Image format plugins for Qt
|
description: Image format plugins for Qt
|
||||||
tier: 1
|
tier: 2
|
||||||
type: functional
|
type: functional
|
||||||
platforms:
|
platforms:
|
||||||
- name: Linux
|
- name: Linux
|
||||||
|
- name: FreeBSD
|
||||||
- name: MacOSX
|
- name: MacOSX
|
||||||
- name: Windows
|
- name: Windows
|
||||||
note: No EPS support on Windows
|
note: No EPS support on Windows
|
||||||
|
- name: Android
|
||||||
portingAid: false
|
portingAid: false
|
||||||
deprecated: false
|
deprecated: false
|
||||||
release: true
|
release: true
|
||||||
|
|
||||||
|
public_lib: true
|
||||||
|
group: Frameworks
|
||||||
|
subgroup: Tier 2
|
||||||
|
@ -89,3 +89,20 @@ target_link_libraries(kimg_xcf Qt5::Gui)
|
|||||||
install(TARGETS kimg_xcf DESTINATION ${KDE_INSTALL_QTPLUGINDIR}/imageformats/)
|
install(TARGETS kimg_xcf DESTINATION ${KDE_INSTALL_QTPLUGINDIR}/imageformats/)
|
||||||
install(FILES xcf.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}/qimageioplugins/)
|
install(FILES xcf.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}/qimageioplugins/)
|
||||||
|
|
||||||
|
##################################
|
||||||
|
|
||||||
|
if (KF5Archive_FOUND)
|
||||||
|
|
||||||
|
add_library(kimg_kra MODULE kra.cpp)
|
||||||
|
target_link_libraries(kimg_kra Qt5::Gui KF5::Archive)
|
||||||
|
|
||||||
|
install(TARGETS kimg_kra DESTINATION ${KDE_INSTALL_QTPLUGINDIR}/imageformats/)
|
||||||
|
install(FILES kra.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}/qimageioplugins/)
|
||||||
|
|
||||||
|
add_library(kimg_ora MODULE ora.cpp)
|
||||||
|
target_link_libraries(kimg_ora Qt5::Gui KF5::Archive)
|
||||||
|
|
||||||
|
install(TARGETS kimg_ora DESTINATION ${KDE_INSTALL_QTPLUGINDIR}/imageformats/)
|
||||||
|
install(FILES ora.desktop DESTINATION ${KDE_INSTALL_KSERVICES5DIR}/qimageioplugins/)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
@ -15,12 +15,8 @@
|
|||||||
#include <QProcess>
|
#include <QProcess>
|
||||||
#include <QTemporaryFile>
|
#include <QTemporaryFile>
|
||||||
|
|
||||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
|
|
||||||
// logging category for this framework, default: log stuff >= warning
|
// logging category for this framework, default: log stuff >= warning
|
||||||
Q_LOGGING_CATEGORY(EPSPLUGIN, "epsplugin", QtWarningMsg)
|
Q_LOGGING_CATEGORY(EPSPLUGIN, "epsplugin", QtWarningMsg)
|
||||||
#else
|
|
||||||
Q_LOGGING_CATEGORY(EPSPLUGIN, "epsplugin")
|
|
||||||
#endif
|
|
||||||
|
|
||||||
//#define EPS_PERFORMANCE_DEBUG 1
|
//#define EPS_PERFORMANCE_DEBUG 1
|
||||||
|
|
||||||
@ -341,10 +337,10 @@ QImageIOPlugin::Capabilities EPSPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead | CanWrite);
|
return Capabilities(CanRead | CanWrite);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -218,10 +218,10 @@ QImageIOPlugin::Capabilities EXRPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead);
|
return Capabilities(CanRead);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
88
src/imageformats/kra.cpp
Normal file
88
src/imageformats/kra.cpp
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
/* This file is part of the KDE project
|
||||||
|
Copyright (C) 2013 Boudewijn Rempt <boud@valdyas.org>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the Lesser GNU General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This code is based on Thacher Ulrich PSD loading code released
|
||||||
|
on public domain. See: http://tulrich.com/geekstuff/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "kra.h"
|
||||||
|
|
||||||
|
#include <kzip.h>
|
||||||
|
|
||||||
|
#include <QImage>
|
||||||
|
#include <QIODevice>
|
||||||
|
#include <QFile>
|
||||||
|
|
||||||
|
KraHandler::KraHandler()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KraHandler::canRead() const
|
||||||
|
{
|
||||||
|
if (canRead(device())) {
|
||||||
|
setFormat("kra");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KraHandler::read(QImage *image)
|
||||||
|
{
|
||||||
|
KZip zip(device());
|
||||||
|
if (!zip.open(QIODevice::ReadOnly)) return false;
|
||||||
|
|
||||||
|
const KArchiveEntry *entry = zip.directory()->entry(QLatin1String("mergedimage.png"));
|
||||||
|
if (!entry || !entry->isFile()) return false;
|
||||||
|
|
||||||
|
const KZipFileEntry* fileZipEntry = static_cast<const KZipFileEntry*>(entry);
|
||||||
|
|
||||||
|
image->loadFromData(fileZipEntry->data(), "PNG");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KraHandler::canRead(QIODevice *device)
|
||||||
|
{
|
||||||
|
if (!device) {
|
||||||
|
qWarning("KraHandler::canRead() called with no device");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
char buff[57];
|
||||||
|
if (device->peek(buff, sizeof(buff)) == sizeof(buff))
|
||||||
|
return qstrcmp(buff + 0x26, "application/x-krita") == 0;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QImageIOPlugin::Capabilities KraPlugin::capabilities(QIODevice *device, const QByteArray &format) const
|
||||||
|
{
|
||||||
|
if (format == "kra" || format == "KRA") {
|
||||||
|
return Capabilities(CanRead);
|
||||||
|
}
|
||||||
|
if (!format.isEmpty()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
if (!device->isOpen()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Capabilities cap;
|
||||||
|
if (device->isReadable() && KraHandler::canRead(device)) {
|
||||||
|
cap |= CanRead;
|
||||||
|
}
|
||||||
|
return cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
QImageIOHandler *KraPlugin::create(QIODevice *device, const QByteArray &format) const
|
||||||
|
{
|
||||||
|
QImageIOHandler *handler = new KraHandler;
|
||||||
|
handler->setDevice(device);
|
||||||
|
handler->setFormat(format);
|
||||||
|
return handler;
|
||||||
|
}
|
7
src/imageformats/kra.desktop
Normal file
7
src/imageformats/kra.desktop
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Service
|
||||||
|
X-KDE-ServiceTypes=QImageIOPlugins
|
||||||
|
X-KDE-ImageFormat=kra
|
||||||
|
X-KDE-MimeType=application/x-krita
|
||||||
|
X-KDE-Read=true
|
||||||
|
X-KDE-Write=false
|
38
src/imageformats/kra.h
Normal file
38
src/imageformats/kra.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* This file is part of the KDE project
|
||||||
|
Copyright (c) 2013 Boudewijn Rempt <boud@valdyas.org>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the Lesser GNU General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KIMG_KRA_H
|
||||||
|
#define KIMG_KRA_H
|
||||||
|
|
||||||
|
#include <QImageIOPlugin>
|
||||||
|
|
||||||
|
class KraHandler : public QImageIOHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KraHandler();
|
||||||
|
|
||||||
|
bool canRead() const Q_DECL_OVERRIDE;
|
||||||
|
bool read(QImage *image) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
static bool canRead(QIODevice *device);
|
||||||
|
};
|
||||||
|
|
||||||
|
class KraPlugin : public QImageIOPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "kra.json")
|
||||||
|
|
||||||
|
public:
|
||||||
|
Capabilities capabilities(QIODevice *device, const QByteArray &format) const Q_DECL_OVERRIDE;
|
||||||
|
QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const Q_DECL_OVERRIDE;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
5
src/imageformats/kra.json
Normal file
5
src/imageformats/kra.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"Keys": [ "kra" ],
|
||||||
|
"MimeTypes": [ "application/x-krita", "application/x-krita" ]
|
||||||
|
}
|
||||||
|
|
87
src/imageformats/ora.cpp
Normal file
87
src/imageformats/ora.cpp
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
/* This file is part of the KDE project
|
||||||
|
Copyright (C) 2013 Boudewijn Rempt <boud@valdyas.org>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the Lesser GNU General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This code is based on Thacher Ulrich PSD loading code released
|
||||||
|
on public domain. See: http://tulrich.com/geekstuff/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ora.h"
|
||||||
|
|
||||||
|
#include <QImage>
|
||||||
|
#include <QScopedPointer>
|
||||||
|
|
||||||
|
#include <kzip.h>
|
||||||
|
|
||||||
|
OraHandler::OraHandler()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OraHandler::canRead() const
|
||||||
|
{
|
||||||
|
if (canRead(device())) {
|
||||||
|
setFormat("ora");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OraHandler::read(QImage *image)
|
||||||
|
{
|
||||||
|
KZip zip(device());
|
||||||
|
if (!zip.open(QIODevice::ReadOnly)) return false;
|
||||||
|
|
||||||
|
const KArchiveEntry *entry = zip.directory()->entry(QLatin1String("mergedimage.png"));
|
||||||
|
if (!entry || !entry->isFile()) return false;
|
||||||
|
|
||||||
|
const KZipFileEntry* fileZipEntry = static_cast<const KZipFileEntry*>(entry);
|
||||||
|
|
||||||
|
image->loadFromData(fileZipEntry->data(), "PNG");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool OraHandler::canRead(QIODevice *device)
|
||||||
|
{
|
||||||
|
if (!device) {
|
||||||
|
qWarning("OraHandler::canRead() called with no device");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
char buff[54];
|
||||||
|
if (device->peek(buff, sizeof(buff)) == sizeof(buff))
|
||||||
|
return qstrcmp(buff + 0x26, "image/openraster") == 0;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
QImageIOPlugin::Capabilities OraPlugin::capabilities(QIODevice *device, const QByteArray &format) const
|
||||||
|
{
|
||||||
|
if (format == "ora" || format == "ORA") {
|
||||||
|
return Capabilities(CanRead);
|
||||||
|
}
|
||||||
|
if (!format.isEmpty()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
if (!device->isOpen()) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Capabilities cap;
|
||||||
|
if (device->isReadable() && OraHandler::canRead(device)) {
|
||||||
|
cap |= CanRead;
|
||||||
|
}
|
||||||
|
return cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
QImageIOHandler *OraPlugin::create(QIODevice *device, const QByteArray &format) const
|
||||||
|
{
|
||||||
|
QImageIOHandler *handler = new OraHandler;
|
||||||
|
handler->setDevice(device);
|
||||||
|
handler->setFormat(format);
|
||||||
|
return handler;
|
||||||
|
}
|
7
src/imageformats/ora.desktop
Normal file
7
src/imageformats/ora.desktop
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Type=Service
|
||||||
|
X-KDE-ServiceTypes=QImageIOPlugins
|
||||||
|
X-KDE-ImageFormat=ora
|
||||||
|
X-KDE-MimeType=image/openraster
|
||||||
|
X-KDE-Read=true
|
||||||
|
X-KDE-Write=false
|
38
src/imageformats/ora.h
Normal file
38
src/imageformats/ora.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
/* This file is part of the KDE project
|
||||||
|
Copyright (c) 2013 Boudewijn Rempt <boud@valdyas.org>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the Lesser GNU General Public
|
||||||
|
License as published by the Free Software Foundation; either
|
||||||
|
version 2 of the License, or (at your option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KIMG_ORA_H
|
||||||
|
#define KIMG_ORA_H
|
||||||
|
|
||||||
|
#include <QImageIOPlugin>
|
||||||
|
|
||||||
|
class OraHandler : public QImageIOHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
OraHandler();
|
||||||
|
|
||||||
|
bool canRead() const Q_DECL_OVERRIDE;
|
||||||
|
bool read(QImage *image) Q_DECL_OVERRIDE;
|
||||||
|
|
||||||
|
static bool canRead(QIODevice *device);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class OraPlugin : public QImageIOPlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "ora.json")
|
||||||
|
public:
|
||||||
|
Capabilities capabilities(QIODevice *device, const QByteArray &format) const Q_DECL_OVERRIDE;
|
||||||
|
QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const Q_DECL_OVERRIDE;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
5
src/imageformats/ora.json
Normal file
5
src/imageformats/ora.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"Keys": [ "ora" ],
|
||||||
|
"MimeTypes": [ "image/openraster", "image/openraster" ]
|
||||||
|
}
|
||||||
|
|
@ -667,10 +667,10 @@ QImageIOPlugin::Capabilities PCXPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead | CanWrite);
|
return Capabilities(CanRead | CanWrite);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -449,10 +449,10 @@ QImageIOPlugin::Capabilities SoftimagePICPlugin::capabilities(QIODevice *device,
|
|||||||
return Capabilities(CanRead | CanWrite);
|
return Capabilities(CanRead | CanWrite);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -120,19 +120,19 @@ static quint8 readPixel(QDataStream &stream) {
|
|||||||
quint8 pixel;
|
quint8 pixel;
|
||||||
stream >> pixel;
|
stream >> pixel;
|
||||||
return pixel;
|
return pixel;
|
||||||
};
|
}
|
||||||
static QRgb updateRed(QRgb oldPixel, quint8 redPixel) {
|
static QRgb updateRed(QRgb oldPixel, quint8 redPixel) {
|
||||||
return qRgba(redPixel, qGreen(oldPixel), qBlue(oldPixel), qAlpha(oldPixel));
|
return qRgba(redPixel, qGreen(oldPixel), qBlue(oldPixel), qAlpha(oldPixel));
|
||||||
};
|
}
|
||||||
static QRgb updateGreen(QRgb oldPixel, quint8 greenPixel) {
|
static QRgb updateGreen(QRgb oldPixel, quint8 greenPixel) {
|
||||||
return qRgba(qRed(oldPixel), greenPixel, qBlue(oldPixel), qAlpha(oldPixel));
|
return qRgba(qRed(oldPixel), greenPixel, qBlue(oldPixel), qAlpha(oldPixel));
|
||||||
};
|
}
|
||||||
static QRgb updateBlue(QRgb oldPixel, quint8 bluePixel) {
|
static QRgb updateBlue(QRgb oldPixel, quint8 bluePixel) {
|
||||||
return qRgba(qRed(oldPixel), qGreen(oldPixel), bluePixel, qAlpha(oldPixel));
|
return qRgba(qRed(oldPixel), qGreen(oldPixel), bluePixel, qAlpha(oldPixel));
|
||||||
};
|
}
|
||||||
static QRgb updateAlpha(QRgb oldPixel, quint8 alphaPixel) {
|
static QRgb updateAlpha(QRgb oldPixel, quint8 alphaPixel) {
|
||||||
return qRgba(qRed(oldPixel), qGreen(oldPixel), qBlue(oldPixel), alphaPixel);
|
return qRgba(qRed(oldPixel), qGreen(oldPixel), qBlue(oldPixel), alphaPixel);
|
||||||
};
|
}
|
||||||
typedef QRgb(*channelUpdater)(QRgb,quint8);
|
typedef QRgb(*channelUpdater)(QRgb,quint8);
|
||||||
|
|
||||||
// Load the PSD image.
|
// Load the PSD image.
|
||||||
@ -300,10 +300,10 @@ QImageIOPlugin::Capabilities PSDPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead);
|
return Capabilities(CanRead);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -2,6 +2,6 @@
|
|||||||
Type=Service
|
Type=Service
|
||||||
X-KDE-ServiceTypes=QImageIOPlugins
|
X-KDE-ServiceTypes=QImageIOPlugins
|
||||||
X-KDE-ImageFormat=psd
|
X-KDE-ImageFormat=psd
|
||||||
X-KDE-MimeType=image/x-psd
|
X-KDE-MimeType=image/vnd.adobe.photoshop
|
||||||
X-KDE-Read=true
|
X-KDE-Read=true
|
||||||
X-KDE-Write=false
|
X-KDE-Write=false
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"Keys": [ "psd" ],
|
"Keys": [ "psd" ],
|
||||||
"MimeTypes": [ "image/x-psd" ]
|
"MimeTypes": [ "image/vnd.adobe.photoshop" ]
|
||||||
}
|
}
|
||||||
|
@ -282,10 +282,10 @@ QImageIOPlugin::Capabilities RASPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead);
|
return Capabilities(CanRead);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -111,8 +111,8 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
SGIImage::SGIImage(QIODevice *io) :
|
SGIImage::SGIImage(QIODevice *io) :
|
||||||
_starttab(0),
|
_starttab(nullptr),
|
||||||
_lengthtab(0)
|
_lengthtab(nullptr)
|
||||||
{
|
{
|
||||||
_dev = io;
|
_dev = io;
|
||||||
_stream.setDevice(_dev);
|
_stream.setDevice(_dev);
|
||||||
@ -714,10 +714,10 @@ QImageIOPlugin::Capabilities RGBPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead | CanWrite);
|
return Capabilities(CanRead | CanWrite);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -75,7 +75,7 @@ template<typename Item, typename Func1, typename Func2>
|
|||||||
static inline bool decodeRLEData(RLEVariant variant,
|
static inline bool decodeRLEData(RLEVariant variant,
|
||||||
QDataStream &stream,
|
QDataStream &stream,
|
||||||
Item *dest,
|
Item *dest,
|
||||||
quint16 length,
|
quint32 length,
|
||||||
Func1 readData,
|
Func1 readData,
|
||||||
Func2 updateItem)
|
Func2 updateItem)
|
||||||
{
|
{
|
||||||
|
@ -145,6 +145,9 @@ struct TgaHeaderInfo {
|
|||||||
switch (tga.image_type) {
|
switch (tga.image_type) {
|
||||||
case TGA_TYPE_RLE_INDEXED:
|
case TGA_TYPE_RLE_INDEXED:
|
||||||
rle = true;
|
rle = true;
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
#endif
|
||||||
// no break is intended!
|
// no break is intended!
|
||||||
case TGA_TYPE_INDEXED:
|
case TGA_TYPE_INDEXED:
|
||||||
pal = true;
|
pal = true;
|
||||||
@ -152,6 +155,9 @@ struct TgaHeaderInfo {
|
|||||||
|
|
||||||
case TGA_TYPE_RLE_RGB:
|
case TGA_TYPE_RLE_RGB:
|
||||||
rle = true;
|
rle = true;
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
#endif
|
||||||
// no break is intended!
|
// no break is intended!
|
||||||
case TGA_TYPE_RGB:
|
case TGA_TYPE_RGB:
|
||||||
rgb = true;
|
rgb = true;
|
||||||
@ -159,6 +165,9 @@ struct TgaHeaderInfo {
|
|||||||
|
|
||||||
case TGA_TYPE_RLE_GREY:
|
case TGA_TYPE_RLE_GREY:
|
||||||
rle = true;
|
rle = true;
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
#endif
|
||||||
// no break is intended!
|
// no break is intended!
|
||||||
case TGA_TYPE_GREY:
|
case TGA_TYPE_GREY:
|
||||||
grey = true;
|
grey = true;
|
||||||
@ -414,10 +423,10 @@ QImageIOPlugin::Capabilities TGAPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead | CanWrite);
|
return Capabilities(CanRead | CanWrite);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -107,7 +107,7 @@ private:
|
|||||||
//! copied in different ways.
|
//! copied in different ways.
|
||||||
void (*assignBytes)(Layer &layer, uint i, uint j);
|
void (*assignBytes)(Layer &layer, uint i, uint j);
|
||||||
|
|
||||||
Layer(void) : name(0) {}
|
Layer(void) : name(nullptr) {}
|
||||||
~Layer(void)
|
~Layer(void)
|
||||||
{
|
{
|
||||||
delete[] name;
|
delete[] name;
|
||||||
@ -416,7 +416,7 @@ bool XCFImageFormat::loadImageProperties(QDataStream &xcf_io, XCFImage &xcf_imag
|
|||||||
property.readBytes(tag, size);
|
property.readBytes(tag, size);
|
||||||
|
|
||||||
quint32 flags;
|
quint32 flags;
|
||||||
char *data = 0;
|
char *data = nullptr;
|
||||||
property >> flags >> data;
|
property >> flags >> data;
|
||||||
|
|
||||||
if (tag && strncmp(tag, "gimp-comment", strlen("gimp-comment")) == 0) {
|
if (tag && strncmp(tag, "gimp-comment", strlen("gimp-comment")) == 0) {
|
||||||
@ -474,7 +474,7 @@ bool XCFImageFormat::loadProperty(QDataStream &xcf_io, PropType &type, QByteArra
|
|||||||
xcf_io >> foo;
|
xcf_io >> foo;
|
||||||
type = PropType(foo); // TODO urks
|
type = PropType(foo); // TODO urks
|
||||||
|
|
||||||
char *data = 0;
|
char *data = nullptr;
|
||||||
quint32 size;
|
quint32 size;
|
||||||
|
|
||||||
// The colormap property size is not the correct number of bytes:
|
// The colormap property size is not the correct number of bytes:
|
||||||
@ -1323,7 +1323,9 @@ bool XCFImageFormat::initializeImage(XCFImage &xcf_image)
|
|||||||
image.fill(qRgb(255, 255, 255));
|
image.fill(qRgb(255, 255, 255));
|
||||||
break;
|
break;
|
||||||
} // else, fall through to 32-bit representation
|
} // else, fall through to 32-bit representation
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
#endif
|
||||||
case RGBA_GIMAGE:
|
case RGBA_GIMAGE:
|
||||||
image = QImage(xcf_image.width, xcf_image.height, QImage::Format_ARGB32);
|
image = QImage(xcf_image.width, xcf_image.height, QImage::Format_ARGB32);
|
||||||
if (image.isNull()) {
|
if (image.isNull()) {
|
||||||
@ -1343,7 +1345,9 @@ bool XCFImageFormat::initializeImage(XCFImage &xcf_image)
|
|||||||
image.fill(255);
|
image.fill(255);
|
||||||
break;
|
break;
|
||||||
} // else, fall through to 32-bit representation
|
} // else, fall through to 32-bit representation
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(5,8,0)
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
#endif
|
||||||
case GRAYA_GIMAGE:
|
case GRAYA_GIMAGE:
|
||||||
image = QImage(xcf_image.width, xcf_image.height, QImage::Format_ARGB32);
|
image = QImage(xcf_image.width, xcf_image.height, QImage::Format_ARGB32);
|
||||||
if (image.isNull()) {
|
if (image.isNull()) {
|
||||||
@ -1442,7 +1446,7 @@ void XCFImageFormat::copyLayerToImage(XCFImage &xcf_image)
|
|||||||
{
|
{
|
||||||
Layer &layer(xcf_image.layer);
|
Layer &layer(xcf_image.layer);
|
||||||
QImage &image(xcf_image.image);
|
QImage &image(xcf_image.image);
|
||||||
PixelCopyOperation copy = 0;
|
PixelCopyOperation copy = nullptr;
|
||||||
|
|
||||||
switch (layer.type) {
|
switch (layer.type) {
|
||||||
case RGB_GIMAGE:
|
case RGB_GIMAGE:
|
||||||
@ -1725,7 +1729,7 @@ void XCFImageFormat::mergeLayerIntoImage(XCFImage &xcf_image)
|
|||||||
Layer &layer(xcf_image.layer);
|
Layer &layer(xcf_image.layer);
|
||||||
QImage &image(xcf_image.image);
|
QImage &image(xcf_image.image);
|
||||||
|
|
||||||
PixelMergeOperation merge = 0;
|
PixelMergeOperation merge = nullptr;
|
||||||
|
|
||||||
if (!layer.opacity) {
|
if (!layer.opacity) {
|
||||||
return; // don't bother doing anything
|
return; // don't bother doing anything
|
||||||
@ -2686,10 +2690,10 @@ QImageIOPlugin::Capabilities XCFPlugin::capabilities(QIODevice *device, const QB
|
|||||||
return Capabilities(CanRead);
|
return Capabilities(CanRead);
|
||||||
}
|
}
|
||||||
if (!format.isEmpty()) {
|
if (!format.isEmpty()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
if (!device->isOpen()) {
|
if (!device->isOpen()) {
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
Capabilities cap;
|
Capabilities cap;
|
||||||
|
@ -32,29 +32,29 @@
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
QCoreApplication app(argc, argv);
|
QCoreApplication app(argc, argv);
|
||||||
QCoreApplication::addLibraryPath(QLatin1String(PLUGIN_DIR));
|
QCoreApplication::addLibraryPath(QStringLiteral(PLUGIN_DIR));
|
||||||
QCoreApplication::setApplicationName(QLatin1String("imageconverter"));
|
QCoreApplication::setApplicationName(QStringLiteral("imageconverter"));
|
||||||
QCoreApplication::setApplicationVersion(QLatin1String("1.01.01.0"));
|
QCoreApplication::setApplicationVersion(QStringLiteral("1.01.01.0"));
|
||||||
|
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
parser.setApplicationDescription(QLatin1String("Converts images from one format to another"));
|
parser.setApplicationDescription(QStringLiteral("Converts images from one format to another"));
|
||||||
parser.addHelpOption();
|
parser.addHelpOption();
|
||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
parser.addPositionalArgument(QLatin1String("in"), QLatin1String("input image file"));
|
parser.addPositionalArgument(QStringLiteral("in"), QStringLiteral("input image file"));
|
||||||
parser.addPositionalArgument(QLatin1String("out"), QLatin1String("output image file"));
|
parser.addPositionalArgument(QStringLiteral("out"), QStringLiteral("output image file"));
|
||||||
QCommandLineOption informat(
|
QCommandLineOption informat(
|
||||||
QStringList() << QLatin1String("i") << QLatin1String("informat"),
|
QStringList() << QStringLiteral("i") << QStringLiteral("informat"),
|
||||||
QLatin1String("Image format for input file"),
|
QStringLiteral("Image format for input file"),
|
||||||
QLatin1String("format"));
|
QStringLiteral("format"));
|
||||||
parser.addOption(informat);
|
parser.addOption(informat);
|
||||||
QCommandLineOption outformat(
|
QCommandLineOption outformat(
|
||||||
QStringList() << QLatin1String("o") << QLatin1String("outformat"),
|
QStringList() << QStringLiteral("o") << QStringLiteral("outformat"),
|
||||||
QLatin1String("Image format for output file"),
|
QStringLiteral("Image format for output file"),
|
||||||
QLatin1String("format"));
|
QStringLiteral("format"));
|
||||||
parser.addOption(outformat);
|
parser.addOption(outformat);
|
||||||
QCommandLineOption listformats(
|
QCommandLineOption listformats(
|
||||||
QStringList() << QLatin1String("l") << QLatin1String("list"),
|
QStringList() << QStringLiteral("l") << QStringLiteral("list"),
|
||||||
QLatin1String("List supported image formats"));
|
QStringLiteral("List supported image formats"));
|
||||||
parser.addOption(listformats);
|
parser.addOption(listformats);
|
||||||
|
|
||||||
parser.process(app);
|
parser.process(app);
|
||||||
|
Reference in New Issue
Block a user