how to create a new histogram type

Casper Boemann cbr at
Fri Sep 16 14:02:38 CEST 2005


I asked Bart on irc how to create a new histogram that shows the L part of Lab 
for any colorspace

Here is what he wrote:

what you need is basically a copy of KisGenericRGBHistogramProducer

 just like that GenericRGB producer, you inherit from 

probably you can call it KisGenericLightnessHistogramProducer

ok, so for the class declaration just copy from the GenericRGB one, but with 
the name changed

that's all you'll need to override for that one

KisBasicHistogramProducer(KisID("GENLIGHTHISTO", "Generic Lab Lightness 
Histogram"), 1, 256, 0)
  m_channelsList.append(new KisChannelInfo(i18n("L"), 0, COLOR));

channels() and maximalZoom() const implementations can be copied from 

 positionToString(double pos) const will be the same, but replace the UINT8 
with UINT16

that leaves you with only addRegionToBin to be implemented with actual Lab 

Only if you want it to show up in the histogram as well you'll need to add a 
bit of code

so addRegionToBin is basically not too hard as well if you know how to convert 
from any colorspace to Lab

what you'll basically will need to do is the basic iterating logic, which you 
can copy as well from genericRGB

 but instead of calling the colorspace's toQColor then, you'll need to 
transform the Q_UINT8* pixel to Lab value of your conversion));

and basically you're done

you can now make a histogram from it, but I forgot that if you want to display 
it in the histogram view you'll need to register it with the registry anyway

 which is again as simple as copying from 
KisGenericRGBHistogramProducerFactory, and replacing the RGB references to 
your new Lightness thing

and then you need to register that factory with the producer by doing a normal 
add on it

and then you can use the histogram in the view as well
best regards / venlig hilsen
Casper Boemann

More information about the kimageshop mailing list