Merge pull request #2766 from shun-iwasawa/g/fix_histogram_pick_color_on_snapshot

Fix picking color of the snapshot image on Flipbook
This commit is contained in:
Rodney 2019-09-10 15:40:24 -05:00 committed by GitHub
commit 1e87ca33b0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 42 additions and 9 deletions

View file

@ -875,6 +875,26 @@ void ImageViewer::setPickedColorToStyleEditor(const TPixel32 &color) {
TApp::instance()->getPaletteController()->setColorSample(color);
}
//---------------------------------------------------------------------------------------------
TImageP ImageViewer::getPickedImage(QPointF mousePos) {
bool cursorIsInSnapShot = false;
if (m_visualSettings.m_doCompare) {
if (m_compareSettings.m_compareY == ImagePainter::DefaultCompareValue)
cursorIsInSnapShot =
m_compareSettings.m_swapCompared ==
(mousePos.x() > width() * m_compareSettings.m_compareX);
else
cursorIsInSnapShot =
m_compareSettings.m_swapCompared ==
(height() - mousePos.y() > height() * m_compareSettings.m_compareY);
}
if (cursorIsInSnapShot)
return TImageCache::instance()->get(QString("TnzCompareImg"), false);
else
return m_image;
}
//---------------------------------------------------------------------------------------------
/*! rgb picking
*/
@ -891,7 +911,13 @@ void ImageViewer::pickColor(QMouseEvent *event, bool putValueToStyleEditor) {
return;
}
StylePicker picker(m_image);
TImageP img = getPickedImage(curPos);
if (!img) {
m_histogramPopup->updateInfo(TPixel32::Transparent, TPointD(-1, -1));
return;
}
StylePicker picker(img);
TPointD mousePos = TPointD(curPos.x(), height() - 1 - curPos.y());
TRectD area = TRectD(mousePos.x, mousePos.y, mousePos.x, mousePos.y);
@ -900,9 +926,8 @@ void ImageViewer::pickColor(QMouseEvent *event, bool putValueToStyleEditor) {
getViewAff().inv() * TPointD(curPos.x() - (qreal)(width()) / 2,
-curPos.y() + (qreal)(height()) / 2);
TRectD imgRect = (m_image->raster())
? convert(TRect(m_image->raster()->getSize()))
: m_image->getBBox();
TRectD imgRect = (img->raster()) ? convert(TRect(img->raster()->getSize()))
: img->getBBox();
TPointD imagePos =
TPointD(0.5 * imgRect.getLx() + pos.x, 0.5 * imgRect.getLy() + pos.y);
@ -912,7 +937,7 @@ void ImageViewer::pickColor(QMouseEvent *event, bool putValueToStyleEditor) {
else
pix = picker.pickColor(area);
if (!m_image->raster() || imgRect.contains(imagePos)) {
if (!img->raster() || imgRect.contains(imagePos)) {
// throw the picked color to the histogram
m_histogramPopup->updateInfo(pix, imagePos);
// throw it to the style editor as well
@ -928,8 +953,8 @@ void ImageViewer::pickColor(QMouseEvent *event, bool putValueToStyleEditor) {
* specified rectangle
*/
void ImageViewer::rectPickColor(bool putValueToStyleEditor) {
auto isRas32 = [this]() -> bool {
TRasterImageP ri = m_image;
auto isRas32 = [this](TImageP img) -> bool {
TRasterImageP ri = img;
if (!ri) return false;
TRaster32P ras32 = ri->getRaster();
if (!ras32) return false;
@ -939,7 +964,13 @@ void ImageViewer::rectPickColor(bool putValueToStyleEditor) {
if (!m_isHistogramEnable) return;
if (!m_histogramPopup->isVisible()) return;
StylePicker picker(m_image);
TImageP img = getPickedImage(m_pos);
if (!img) {
m_histogramPopup->updateAverageColor(TPixel32::Transparent);
return;
}
StylePicker picker(img);
TPoint startPos =
TPoint(m_pressedMousePos.x, height() - 1 - m_pressedMousePos.y);
@ -952,7 +983,7 @@ void ImageViewer::rectPickColor(bool putValueToStyleEditor) {
}
TPixel32 pix;
if (m_lutCalibrator && m_lutCalibrator->isValid() && isRas32()) {
if (m_lutCalibrator && m_lutCalibrator->isValid() && isRas32(img)) {
TPointD start = getViewAff().inv() * TPointD(startPos.x - width() / 2,
startPos.y - height() / 2);
TPointD end = getViewAff().inv() *

View file

@ -82,6 +82,8 @@ class ImageViewer final : public GLWidgetForHighDpi {
void pickColor(QMouseEvent *event, bool putValueToStyleEditor = false);
void rectPickColor(bool putValueToStyleEditor = false);
void setPickedColorToStyleEditor(const TPixel32 &color);
// get the image (m_image or the snapshot) to be picked.
TImageP getPickedImage(QPointF mousePos);
public:
ImageViewer(QWidget *parent, FlipBook *flipbook, bool showHistogram);