13#include <QApplication>
17#include <QImageReader>
60 reader.setDecideFormatFromContent(
true);
61 image = reader.read();
64 reader.setAutoDetectImageFormat(
true);
65 image = reader.read();
85 image.convertToColorSpace(QColorSpace(QColorSpace::SRgb));
87 return (!
image.isNull());
92 return !
image.isNull();
102 gc2.drawImage(QPoint(),
image);
115 , newSaturation(newSaturation)
119 Q_FOREACH(
auto *shape,
shapes) {
125 Q_FOREACH(
auto *image,
images) {
132 auto saturationIterator = oldSaturations.begin();
133 Q_FOREACH(
auto *image, images) {
134 image->setSaturation(*saturationIterator);
136 saturationIterator++;
142 Q_FOREACH(
auto *image, images) {
143 image->setSaturation(newSaturation);
165 reference->
d->externalFilename =
filename;
166 bool ok = reference->
d->loadFromFile();
169 QRect r = QRect(QPoint(), reference->
d->image.size());
176 QMessageBox::critical(
parent, i18nc(
"@title:window",
"Krita"), i18n(
"Could not load %1.",
filename));
202 QRect r = QRect(QPoint(), reference->d->image.size());
204 reference->setSize(
size);
212 bool ok = reference->
d->loadFromQImage(img);
215 QRect r = QRect(QPoint(), reference->
d->image.size());
232 QSizeF shapeSize =
size();
234 QTransform
transform = QTransform::fromScale(shapeSize.width() /
d->image.width(), shapeSize.height() /
d->image.height());
236 if (
d->cachedImage.isNull()) {
243 QTransform devicePixelRatioFTransform = QTransform::fromScale(gc.device()->devicePixelRatioF(), gc.device()->devicePixelRatioF());
246 QImage prescaled =
d->mipmap.getClosestWithoutWorkaroundBorder(
transform * devicePixelRatioFTransform * gc.transform(), &
scale);
252 gc.setRenderHints(QPainter::Antialiasing);
254 gc.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
256 gc.setClipRect(QRectF(QPointF(), shapeSize), Qt::IntersectClip);
258 gc.drawImage(QPoint(), prescaled);
266 d->cachedImage = QImage();
271 return d->saturation;
287 return !
d->externalFilename.isEmpty();
292 return d->externalFilename;
297 return d->internalFilename;
310 const QSizeF shapeSize =
size();
311 const QTransform
scale = QTransform::fromScale(
d->image.width() / shapeSize.width(),
d->image.height() / shapeSize.height());
316 if (
d->cachedImage.isNull()) {
320 return d->cachedImage.pixelColor(localPosition.toPoint());
327 QDomElement element = document.createElement(
"referenceimage");
330 d->internalFilename = QString(
"reference_images/%1.png").arg(
id);
333 const QString src =
d->embed ?
d->internalFilename : (QString(
"file://") +
d->externalFilename);
334 element.setAttribute(
"src", src);
336 const QSizeF &shapeSize =
size();
339 element.setAttribute(
"keepAspectRatio",
keepAspectRatio() ?
"true" :
"false");
345 parentElement.appendChild(element);
352 const QString &src = elem.attribute(
"src");
354 if (src.startsWith(
"file://")) {
355 reference->d->externalFilename = src.mid(7);
356 reference->d->embed =
false;
358 reference->d->internalFilename = src;
359 reference->d->embed =
true;
364 reference->setSize(QSizeF(width, height));
365 reference->setKeepAspectRatio(elem.attribute(
"keepAspectRatio",
"true").toLower() ==
"true");
371 reference->setTransparency(1.0 - opacity);
381 if (!
d->embed)
return true;
383 if (!store->
open(
d->internalFilename)) {
390 if (storeDev.
open(QIODevice::WriteOnly)) {
391 saved =
d->image.save(&storeDev,
"PNG");
394 return store->
close() && saved;
400 return d->loadFromFile();
403 if (!store->
open(
d->internalFilename)) {
408 if (!storeDev.
open(QIODevice::ReadOnly)) {
412 if (!
d->image.load(&storeDev,
"PNG")) {
416 return store->
close();
static KisClipboard * instance()
_Private::Traits< T >::Result imageToDocument(const T &obj) const
bool openPath(const QString &path, OpenFlags flags=None)
openPath Open a Path
QImage convertToQImage(qint32 x1, qint32 y1, qint32 width, qint32 height, const KoColorProfile *profile)
QRect bounds() const override
static KisPart * instance()
void removeDocument(KisDocument *document, bool deleteDocument=true)
KisDocument * createTemporaryDocument() const
The KisReferenceImage class represents a single reference image.
bool saveImage(KoStore *store) const
bool loadImage(KoStore *store)
void paint(QPainter &gc) const override
Paint the shape fill The class extending this one is responsible for painting itself....
static KisReferenceImage * fromFile(const QString &filename, const KisCoordinatesConverter &converter, QWidget *parent)
KoShape * cloneShape() const override
creates a deep copy of the shape or shape's subtree
void setFilename(const QString &filename)
static KisReferenceImage * fromClipboard(const KisCoordinatesConverter &converter)
void setEmbed(bool embed)
QColor getPixel(QPointF position)
static KisReferenceImage * fromQImage(const KisCoordinatesConverter &converter, const QImage &img)
void setSaturation(qreal saturation)
void saveXml(QDomDocument &document, QDomElement &parentElement, int id)
QString internalFile() const
static KisReferenceImage * fromPaintDevice(KisPaintDeviceSP src, const KisCoordinatesConverter &converter, QWidget *parent)
QSharedDataPointer< Private > d
static KisReferenceImage * fromXml(const QDomElement &elem)
QList< KoShape * > shapes() const
KoShapeContainer * parent
virtual QSizeF size() const
Get the size of the shape in pt.
void setKeepAspectRatio(bool keepAspect)
QTransform absoluteTransformation() const
void scale(qreal sx, qreal sy)
Scale the shape using the zero-point which is the top-left corner.
bool keepAspectRatio() const
QTransform transform() const
return the current matrix that contains the rotation/scale/position of this shape
qreal transparency(bool recursive=false) const
virtual void setSize(const QSizeF &size)
Resize the shape.
QPointF position() const
Get the position of the shape in pt.
bool open(OpenMode m) override
bool open(const QString &name)
static QString transformToString(const QTransform &transform)
Converts specified transformation to a string.
#define KIS_SAFE_ASSERT_RECOVER_BREAK(cond)
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
KUndo2MagicString kundo2_i18n(const char *text)
double toDouble(const QString &str, bool *ok=nullptr)
QString toString(const QString &value)
QImage convertQImageToGrayA(const QImage &image)
bool loadFromQImage(const QImage &img)
SetSaturationCommand(const QList< KoShape * > &images, qreal newSaturation, KUndo2Command *parent=0)
QVector< KisReferenceImage * > images
QVector< qreal > oldSaturations
static KoColorSpaceRegistry * instance()