<div class="gmail_quote">On Wed, Jan 12, 2011 at 11:17 PM, Silvio Heinrich <span dir="ltr"><<a href="mailto:plassy@web.de">plassy@web.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div bgcolor="#ffffff" text="#000000">
Phew... I think I've gone a bit mad with the blending modes :D.<br>
I added a few. When counting everything together there should be
nearly 40 compositing modes now.<br>
All modes should trait partly transparent layers as Photoshop is
doing it and all modes should<br>
respect the channel flags.<br>
But there are two problems with this patch:<br>
<br>
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).<br>
I personally haven't noticed any speed impact but I've got a 3GHz
quad core, so i think i will be the last<br>
who will notice this.<br>
<br>
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:<br>
<a href="http://www.adobe.com/devnet/pdf.html" target="_blank">http://www.adobe.com/devnet/pdf.html</a><br>
<a href="http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf" target="_blank">http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf</a>
(direct link)<br>
<br>
go to the category "Transparency" -> "Basic Composition
Computations". This spec is of course for PDFs but it seems that
Photoshop uses the same formulas.<br>
Since "Luminosity" and "Color" modes are working i think i made some
mistake in implementing the<br>
"setSat" function (on page 327). Maybe someone else has an
enlightenment, because I'm working in the dark right now :D.<br>
<br>
But apart from this two problems everything else should work fine
(hopefully).<span style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Ubuntu; font-size: 16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="color: rgb(51, 51, 51); font-family: myriad-pro-1,myriad-pro-2,Helvetica,Arial,sans-serif; font-size: 12px; line-height: 16px;"></span></span>
</div>
<br>
<br></blockquote></div><br>I tried to build the branch but I get this error:<br>Linking CXX shared library ../../lib/libpigmentcms.so <br>
CMakeFiles/pigmentcms.dir/colorspaces/KoLabColorSpace.o: In function `unsigned short cfVividLight<unsigned short>(unsigned short, unsigned short)': <br>KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short cfVividLight<unsigned short>(unsigned short, unsigned short)]+0x31): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'<br>
KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short cfVividLight<unsigned short>(unsigned short, unsigned short)]+0x3d): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'<br>
KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short cfVividLight<unsigned short>(unsigned short, unsigned short)]+0xb3): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'<br>
KoLabColorSpace.cpp:(.text._Z12cfVividLightItET_S0_S0_[unsigned short cfVividLight<unsigned short>(unsigned short, unsigned short)]+0xbf): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'<br>
CMakeFiles/pigmentcms.dir/colorspaces/KoLabColorSpace.o: In function `unsigned short cfDivide<unsigned short>(unsigned short, unsigned short)':<br>KoLabColorSpace.cpp:(.text._Z8cfDivideItET_S0_S0_[unsigned short cfDivide<unsigned short>(unsigned short, unsigned short)]+0x25): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'<br>
KoLabColorSpace.cpp:(.text._Z8cfDivideItET_S0_S0_[unsigned short cfDivide<unsigned short>(unsigned short, unsigned short)]+0x31): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'<br>
CMakeFiles/pigmentcms.dir/colorspaces/KoLabColorSpace.o: In function `unsigned short cfArcTangent<unsigned short>(unsigned short, unsigned short)':<br>KoLabColorSpace.cpp:(.text._Z12cfArcTangentItET_S0_S0_[unsigned short cfArcTangent<unsigned short>(unsigned short, unsigned short)]+0x25): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::zeroValue'<br>
KoLabColorSpace.cpp:(.text._Z12cfArcTangentItET_S0_S0_[unsigned short cfArcTangent<unsigned short>(unsigned short, unsigned short)]+0x31): undefined reference to `KoColorSpaceMathsTraits<unsigned short>::unitValue'<br>
CMakeFiles/pigmentcms.dir/colorspaces/KoRgbU8ColorSpace.o: In function `unsigned char cfVividLight<unsigned char>(unsigned char, unsigned char)':<br>KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char cfVividLight<unsigned char>(unsigned char, unsigned char)]+0x27): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'<br>
KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char cfVividLight<unsigned char>(unsigned char, unsigned char)]+0x33): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'<br>
KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char cfVividLight<unsigned char>(unsigned char, unsigned char)]+0x97): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'<br>
KoRgbU8ColorSpace.cpp:(.text._Z12cfVividLightIhET_S0_S0_[unsigned char cfVividLight<unsigned char>(unsigned char, unsigned char)]+0xa3): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'<br>
CMakeFiles/pigmentcms.dir/colorspaces/KoRgbU8ColorSpace.o: In function `unsigned char cfDivide<unsigned char>(unsigned char, unsigned char)':<br>KoRgbU8ColorSpace.cpp:(.text._Z8cfDivideIhET_S0_S0_[unsigned char cfDivide<unsigned char>(unsigned char, unsigned char)]+0x21): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'<br>
KoRgbU8ColorSpace.cpp:(.text._Z8cfDivideIhET_S0_S0_[unsigned char cfDivide<unsigned char>(unsigned char, unsigned char)]+0x2d): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'<br>
CMakeFiles/pigmentcms.dir/colorspaces/KoRgbU8ColorSpace.o: In function `unsigned char cfArcTangent<unsigned char>(unsigned char, unsigned char)':<br>KoRgbU8ColorSpace.cpp:(.text._Z12cfArcTangentIhET_S0_S0_[unsigned char cfArcTangent<unsigned char>(unsigned char, unsigned char)]+0x21): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::zeroValue'<br>
KoRgbU8ColorSpace.cpp:(.text._Z12cfArcTangentIhET_S0_S0_[unsigned char cfArcTangent<unsigned char>(unsigned char, unsigned char)]+0x2d): undefined reference to `KoColorSpaceMathsTraits<unsigned char>::unitValue'<br>
collect2: ld returned 1 exit status<br>make[2]: *** [lib/libpigmentcms.so.8.0.0] Fehler 1<br>make[1]: *** [libs/pigment/CMakeFiles/pigmentcms.dir/all] Fehler 2<br>make: *** [all] Fehler 2<br><br>