Krita Source Code Documentation
Loading...
Searching...
No Matches
KisImportExportUtils.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
10#include <KoColorSpace.h>
11#include <KoColorProfile.h>
12#include "kis_image.h"
15
16namespace KritaUtils {
17
19 KisImportUserFeedbackInterface *feedbackInterface,
20 KisImageBarrierLock &lock)
21{
22 const KoColorSpace *replacementColorSpace = 0;
24 KoColorConversionTransformation::ConversionFlags replacementColorSpaceConversionFlags = KoColorConversionTransformation::internalConversionFlags();
25
26 const KoColorSpace *colorSpace = image->colorSpace();
27 const KoColorProfile *profile = colorSpace->profile();
28
29 if (profile && !profile->isSuitableForOutput()) {
33
34 KIS_SAFE_ASSERT_RECOVER_NOOP(feedbackInterface);
35 if (feedbackInterface) {
37 feedbackInterface->askUser([&] (QWidget *parent) {
38
39 KisColorSpaceConversionDialog * dlgColorSpaceConversion = new KisColorSpaceConversionDialog(parent, "ColorSpaceConversion");
40 Q_CHECK_PTR(dlgColorSpaceConversion);
41
42 const KoColorSpace* fallbackColorSpace =
44 colorSpace->colorModelId().id(),
45 colorSpace->colorDepthId().id(),
46 nullptr);
47
48 dlgColorSpaceConversion->setCaption(i18n("Convert image color space on import"));
49 dlgColorSpaceConversion->m_page->lblHeadlineWarning->setText(
50 i18nc("the argument is the ICC profile name",
51 "The image has a profile attached that Krita cannot edit images "
52 "in (\"%1\"), please select a space to convert to for editing: \n"
53 , profile->name()));
54 dlgColorSpaceConversion->m_page->lblHeadlineWarning->setVisible(true);
55
56 dlgColorSpaceConversion->setInitialColorSpace(fallbackColorSpace, 0);
57
58 if (dlgColorSpaceConversion->exec() == QDialog::Accepted) {
59
60 replacementColorSpace = dlgColorSpaceConversion->colorSpace();
61 replacementColorSpaceIntent = dlgColorSpaceConversion->conversionIntent();
62 replacementColorSpaceConversionFlags= dlgColorSpaceConversion->conversionFlags();
63 } else {
64 return false;
65 }
66
67 return true;
68 });
69
74 }
75 }
76 }
77
78 if (replacementColorSpace) {
87 image->convertImageColorSpace(replacementColorSpace,
88 replacementColorSpaceIntent,
89 replacementColorSpaceConversionFlags);
90 lock.unlock();
91 image->waitForDone();
92 }
93
95}
96
97}
KoColorConversionTransformation::Intent conversionIntent() const
void setInitialColorSpace(const KoColorSpace *cs, KisImageSP entireImage)
KoColorConversionTransformation::ConversionFlags conversionFlags() const
void waitForDone()
const KoColorSpace * colorSpace() const
void convertImageColorSpace(const KoColorSpace *dstColorSpace, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
virtual Result askUser(AskCallback callback)=0
ask the user a question about the loading process
virtual KoID colorModelId() const =0
virtual KoID colorDepthId() const =0
virtual const KoColorProfile * profile() const =0
virtual void setCaption(const QString &caption)
Definition KoDialog.cpp:498
QString id() const
Definition KoID.cpp:63
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
KisImportExportErrorCode workaroundUnsuitableImageColorSpace(KisImageSP image, KisImportUserFeedbackInterface *feedbackInterface, KisImageBarrierLock &lock)
virtual bool isSuitableForOutput() const =0
const KoColorSpace * colorSpace(const QString &colorModelId, const QString &colorDepthId, const KoColorProfile *profile)
static KoColorSpaceRegistry * instance()