Color working space based clipping indicator
This commit is contained in:
@@ -188,7 +188,9 @@ void Crop::update (int todo) {
|
|||||||
|
|
||||||
// switch back to rgb
|
// switch back to rgb
|
||||||
parent->ipf.lab2rgb (labnCrop, cropImg);
|
parent->ipf.lab2rgb (labnCrop, cropImg);
|
||||||
cropImgtrue = parent->ipf.lab2rgb (labnCrop, 0,0,cropw,croph, params.icm.working);
|
|
||||||
|
// this in workinging space is held in parallel to allow analysis like shadow/highlight
|
||||||
|
cropImgtrue = parent->ipf.lab2rgb (labnCrop, 0,0,cropw,croph, params.icm.working);
|
||||||
//parent->ipf.lab2rgb (laboCrop, cropImg);
|
//parent->ipf.lab2rgb (laboCrop, cropImg);
|
||||||
|
|
||||||
//cropImg = baseCrop->to8();
|
//cropImg = baseCrop->to8();
|
||||||
|
@@ -655,22 +655,33 @@ void CropWindow::expose (Cairo::RefPtr<Cairo::Context> cr) {
|
|||||||
if (showcs || showch) {
|
if (showcs || showch) {
|
||||||
Glib::RefPtr<Gdk::Pixbuf> tmp = cropHandler.cropPixbuf->copy ();
|
Glib::RefPtr<Gdk::Pixbuf> tmp = cropHandler.cropPixbuf->copy ();
|
||||||
guint8* pix = tmp->get_pixels();
|
guint8* pix = tmp->get_pixels();
|
||||||
|
guint8* pixWrkSpace = cropHandler.cropPixbuftrue->get_pixels();
|
||||||
|
|
||||||
|
int pixRowStride = tmp->get_rowstride ();
|
||||||
|
int pixWSRowStride = cropHandler.cropPixbuftrue->get_rowstride ();
|
||||||
|
|
||||||
#ifdef _OPENMP
|
#ifdef _OPENMP
|
||||||
#pragma omp for
|
#pragma omp for
|
||||||
#endif
|
#endif
|
||||||
for (int i=0; i<tmp->get_height(); i++)
|
for (int i=0; i<tmp->get_height(); i++) {
|
||||||
for (int j=0; j<tmp->get_width(); j++) {
|
guint8* curr = pix + i*pixRowStride;
|
||||||
guint8* curr = pix + i*tmp->get_rowstride () + j*3;
|
guint8* currWS = pixWrkSpace + i*pixWSRowStride;
|
||||||
/*if (showch && (curr[0]>=options.highlightThreshold || curr[1]>=options.highlightThreshold || curr[2]>=options.highlightThreshold))
|
|
||||||
|
for (int j=0; j<tmp->get_width(); j++) {
|
||||||
|
// we must compare clippings in working space, since the cropPixbuf is in sRGB, with mon profile
|
||||||
|
if (showch && (currWS[0]>=options.highlightThreshold || currWS[1]>=options.highlightThreshold || currWS[2]>=options.highlightThreshold))
|
||||||
curr[0] = curr[1] = curr[2] = 0;
|
curr[0] = curr[1] = curr[2] = 0;
|
||||||
else if (showcs && (curr[0]<=options.shadowThreshold || curr[1]<=options.shadowThreshold || curr[2]<=options.shadowThreshold))
|
else if (showcs && (currWS[0]<=options.shadowThreshold || currWS[1]<=options.shadowThreshold || currWS[2]<=options.shadowThreshold))
|
||||||
curr[0] = curr[1] = curr[2] = 255;*/
|
curr[0] = curr[1] = curr[2] = 255;
|
||||||
if (showch && ((0.299*curr[0]+0.587*curr[1]+0.114*curr[2])>=options.highlightThreshold))
|
/*if (showch && ((0.299*curr[0]+0.587*curr[1]+0.114*curr[2])>=options.highlightThreshold))
|
||||||
curr[0] = curr[1] = curr[2] = 0;
|
curr[0] = curr[1] = curr[2] = 0;
|
||||||
else if (showcs && ((0.299*curr[0]+0.587*curr[1]+0.114*curr[2])<=options.shadowThreshold))
|
else if (showcs && ((0.299*curr[0]+0.587*curr[1]+0.114*curr[2])<=options.shadowThreshold))
|
||||||
curr[0] = curr[1] = curr[2] = 255;
|
curr[0] = curr[1] = curr[2] = 255;*/
|
||||||
|
|
||||||
|
curr+=3; currWS+=3;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
iarea->get_window()->draw_pixbuf (iarea->get_style()->get_base_gc(Gtk::STATE_NORMAL), tmp, 0, 0, x+imgX, y+imgY, -1, -1, Gdk::RGB_DITHER_NONE, 0, 0);
|
iarea->get_window()->draw_pixbuf (iarea->get_style()->get_base_gc(Gtk::STATE_NORMAL), tmp, 0, 0, x+imgX, y+imgY, -1, -1, Gdk::RGB_DITHER_NONE, 0, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
Reference in New Issue
Block a user