[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());
                         }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.