Patch: Many composite/blend modes mostly compatible to Adobe Photoshop (c)

Sven Langkamp sven.langkamp at gmail.com
Fri Jan 28 22:52:19 CET 2011


On Wed, Jan 12, 2011 at 11:17 PM, Silvio Heinrich <plassy at web.de> wrote:

>  Phew... I think I've gone a bit mad with the blending modes :D.
> I added a few. When counting everything together there should be nearly 40
> compositing modes now.
> All modes should trait partly transparent layers as Photoshop is doing it
> and all modes should
> respect the channel flags.
> But there are two problems with this patch:
>
> 1. I used a pretty generic approach. So it relies on the compiler to do
> proper inlining. And i didn't use the optimized multiply functions. I had a
> few problems with those functions, because it seems the give no correct
> results but approximations. So I still need to check out which composite
> modes will work with the optimized functions. I just want to say that it
> could be that this is a bit/much slower then the current implementation (i
> don't know how much time you spend in optimizing this).
> I personally haven't noticed any speed impact but I've got a 3GHz quad
> core, so i think i will be the last
> who will notice this.
>
> 2. The "Hue" and "Saturation" modes are not working correctly but the
> "Luminosity" and "Color" modes work exactly as in Photoshop. I coded the
> algorithms after the ISO 3200-1 spec. Adobe released the texts they gave to
> the ISO committee for specification. You can find them here:
> http://www.adobe.com/devnet/pdf.html
>
> http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
> (direct link)
>
> go to the category "Transparency" -> "Basic Composition Computations". This
> spec is of course for PDFs but it seems that Photoshop uses the same
> formulas.
> Since "Luminosity" and "Color" modes are working i think i made some
> mistake in implementing the
> "setSat" function (on page 327). Maybe someone else has an enlightenment,
> because I'm working in the dark right now :D.
>
>  But apart from this two problems everything else should work fine
> (hopefully).
>
>
>
I tried to build the branch but I get this error:
Linking CXX shared library
../../lib/libpigmentcms.so

CMakeFiles/pigmentcms.dir/colorspaces/KoLabColorSpace.o: In function
`unsigned short cfVividLight<unsigned short>(unsigned short, unsigned
short)':
KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short
cfVividLight<unsigned short>(unsigned short, unsigned short)]+0x31):
undefined reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'
KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short
cfVividLight<unsigned short>(unsigned short, unsigned short)]+0x3d):
undefined reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'
KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short
cfVividLight<unsigned short>(unsigned short, unsigned short)]+0xb3):
undefined reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'
KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short
cfVividLight<unsigned short>(unsigned short, unsigned short)]+0xbf):
undefined reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'
CMakeFiles/pigmentcms.dir/colorspaces/KoLabColorSpace.o: In function
`unsigned short cfDivide<unsigned short>(unsigned short, unsigned short)':
KoLabColorSpace.cpp:(.text._Z8cfDivideItET_S0_S0_[unsigned short
cfDivide<unsigned short>(unsigned short, unsigned short)]+0x25): undefined
reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'
KoLabColorSpace.cpp:(.text._Z8cfDivideItET_S0_S0_[unsigned short
cfDivide<unsigned short>(unsigned short, unsigned short)]+0x31): undefined
reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'
CMakeFiles/pigmentcms.dir/colorspaces/KoLabColorSpace.o: In function
`unsigned short cfArcTangent<unsigned short>(unsigned short, unsigned
short)':
KoLabColorSpace.cpp:(.text._Z12cfArcTangentItET_S0_S0_[unsigned short
cfArcTangent<unsigned short>(unsigned short, unsigned short)]+0x25):
undefined reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'
KoLabColorSpace.cpp:(.text._Z12cfArcTangentItET_S0_S0_[unsigned short
cfArcTangent<unsigned short>(unsigned short, unsigned short)]+0x31):
undefined reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'
CMakeFiles/pigmentcms.dir/colorspaces/KoRgbU8ColorSpace.o: In function
`unsigned char cfVividLight<unsigned char>(unsigned char, unsigned char)':
KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char
cfVividLight<unsigned char>(unsigned char, unsigned char)]+0x27): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'
KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char
cfVividLight<unsigned char>(unsigned char, unsigned char)]+0x33): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'
KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char
cfVividLight<unsigned char>(unsigned char, unsigned char)]+0x97): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'
KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char
cfVividLight<unsigned char>(unsigned char, unsigned char)]+0xa3): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'
CMakeFiles/pigmentcms.dir/colorspaces/KoRgbU8ColorSpace.o: In function
`unsigned char cfDivide<unsigned char>(unsigned char, unsigned char)':
KoRgbU8ColorSpace.cpp:(.text._Z8cfDivideIhET_S0_S0_[unsigned char
cfDivide<unsigned char>(unsigned char, unsigned char)]+0x21): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'
KoRgbU8ColorSpace.cpp:(.text._Z8cfDivideIhET_S0_S0_[unsigned char
cfDivide<unsigned char>(unsigned char, unsigned char)]+0x2d): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'
CMakeFiles/pigmentcms.dir/colorspaces/KoRgbU8ColorSpace.o: In function
`unsigned char cfArcTangent<unsigned char>(unsigned char, unsigned char)':
KoRgbU8ColorSpace.cpp:(.text._Z12cfArcTangentIhET_S0_S0_[unsigned char
cfArcTangent<unsigned char>(unsigned char, unsigned char)]+0x21): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'
KoRgbU8ColorSpace.cpp:(.text._Z12cfArcTangentIhET_S0_S0_[unsigned char
cfArcTangent<unsigned char>(unsigned char, unsigned char)]+0x2d): undefined
reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'
collect2: ld returned 1 exit status
make[2]: *** [lib/libpigmentcms.so.8.0.0] Fehler 1
make[1]: *** [libs/pigment/CMakeFiles/pigmentcms.dir/all] Fehler 2
make: *** [all] Fehler 2
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.kde.org/pipermail/kimageshop/attachments/20110128/ebcad387/attachment-0001.htm 


More information about the kimageshop mailing list