[graphics/krita] libs/ui: Improve reference image color sampling accuracy
Emmet O'Neill <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 50d84c8bd600acb35b7561cc436d0bd5dd980cd1 by Emmet O'Neill, on behalf of Dat Le.
Committed on 13/08/2026 at 23:16.
Pushed by emmetoneill into branch 'master'.
Improve reference image color sampling accuracy
By removing unnecessary conversion inside KisReferernceImagesLayer::getPixel to avoid some fractions of errors
M +3 -4 libs/ui/flake/KisReferenceImagesLayer.cpp
M +1 -1 libs/ui/flake/KisReferenceImagesLayer.h
M +1 -3 libs/ui/tool/KisAsyncColorSamplerHelper.cpp
M +3 -1 libs/ui/widgets/KisScreenColorSampler.cpp
https://invent.kde.org/graphics/krita/-/commit/50d84c8bd600acb35b7561cc436d0bd5dd980cd1
diff --git a/libs/ui/flake/KisReferenceImagesLayer.cpp b/libs/ui/flake/KisReferenceImagesLayer.cpp
index 4386fd71f54..dd8a0e0b638 100644
--- a/libs/ui/flake/KisReferenceImagesLayer.cpp
+++ b/libs/ui/flake/KisReferenceImagesLayer.cpp
@@ -251,19 +251,18 @@ QRectF KisReferenceImagesLayer::boundingImageRect() const
return converter()->documentToView(boundingRect());
}
-KoColor KisReferenceImagesLayer::getPixel(QPointF position) const
+KoColor KisReferenceImagesLayer::getPixel(QPointF docPosition) const
{
KoColor transparent;
transparent.setOpacity(0.0);
- const QPointF docPoint = converter()->viewToDocument(position);
- KoShape *shape = shapeManager()->shapeAt(docPoint);
+ KoShape *shape = shapeManager()->shapeAt(docPosition);
if (shape) {
auto *reference = dynamic_cast<KisReferenceImage*>(shape);
KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(reference, transparent);
- return reference->getPixel(docPoint);
+ return reference->getPixel(docPosition);
}
return transparent;
diff --git a/libs/ui/flake/KisReferenceImagesLayer.h b/libs/ui/flake/KisReferenceImagesLayer.h
index 4dc2e747a5d..3c65f6ccd99 100644
--- a/libs/ui/flake/KisReferenceImagesLayer.h
+++ b/libs/ui/flake/KisReferenceImagesLayer.h
@@ -27,7 +27,7 @@ public:
QVector<KisReferenceImage*> referenceImages() const;
QRectF boundingImageRect() const;
- KoColor getPixel(QPointF position) const;
+ KoColor getPixel(QPointF docPosition) const;
void paintReferences(QPainter &painter);
diff --git a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
index 63386560ea5..0d89528f1e6 100644
--- a/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
+++ b/libs/ui/tool/KisAsyncColorSamplerHelper.cpp
@@ -778,14 +778,12 @@ void KisAsyncColorSamplerHelper::slotAddSamplingJob(const QPointF &docPoint)
if (!m_d->strokeId) return;
KisImageSP image = m_d->canvas->image();
-
- dbgUI << "Original doc point in slotAddSamplingJob:" << docPoint;
const QPoint imagePoint = image->documentToImagePixelFloored(docPoint);
if (!m_d->sampleCurrentLayer) {
KisSharedPtr<KisReferenceImagesLayer> referencesLayer = m_d->canvas->imageView()->document()->referenceImagesLayer();
if (referencesLayer && m_d->canvas->referenceImagesDecoration()->visible()) {
- KoColor color = referencesLayer->getPixel(imagePoint);
+ KoColor color = referencesLayer->getPixel(docPoint);
if (color.opacityU8() > 0) {
slotColorSamplingFinished(color);
return;
diff --git a/libs/ui/widgets/KisScreenColorSampler.cpp b/libs/ui/widgets/KisScreenColorSampler.cpp
index d2cdcaa7ec9..fdeac54291e 100644
--- a/libs/ui/widgets/KisScreenColorSampler.cpp
+++ b/libs/ui/widgets/KisScreenColorSampler.cpp
@@ -171,11 +171,13 @@ KoColor KisScreenColorSampler::grabScreenColor(const QPoint &p)
if (image) {
QPointF imagePoint = canvas->coordinatesConverter()->widgetToImage(widgetPoint);
+ // KisReferenceImagesLayer::getPixel use document coordinate
+ QPointF docPoint = canvas->coordinatesConverter()->widgetToDocument(widgetPoint);
// sample from reference images first
KisSharedPtr<KisReferenceImagesLayer> referenceImageLayer = view->document()->referenceImagesLayer();
if (referenceImageLayer && canvas->referenceImagesDecoration()->visible()) {
- KoColor color = referenceImageLayer->getPixel(imagePoint);
+ KoColor color = referenceImageLayer->getPixel(docPoint);
if (color.opacityU8() > 0) {
return color.convertedTo(image->colorSpace());
}