[calligra] /: Merge remote branch 'origin/krita-colorsmudge-silvioheinrich'
Silvio Heinrich
plassy at web.de
Sun Mar 20 17:49:40 CET 2011
On 03/18/2011 10:32 AM, Cyrille Berger Skott wrote:
> Hi,
>
> This commit is breaking the following unit test:
>
> http://my.cdash.org/testSummary.php?project=344&name=libs-pigment-
> TestKoRgbU8ColorSpaceTester&date=2011-03-17
>
> Can you have a look ?
Well... I looked at it and I have some problems with this test:
QColor blue(0, 0, 255);
QColor transparentRed(255, 0, 0, 0);
// Copying something transparent over something non-transparent
should, of course, make the dst transparent
src.fromQColor(transparentRed);
dst.fromQColor(blue);
QVERIFY(memcmp(dst.data(), src.data(), cs->pixelSize()) != 0);
copyOp->composite(dst.data(), cs->pixelSize(), src.data(),
cs->pixelSize(), 0, 0, 1, 1, OPACITY_OPAQUE_U8);
src.fromQColor(transparentRed);
QVERIFY(memcmp(dst.data(), src.data(), cs->pixelSize()) == 0);
The test expects the color from the completely transparent source pixel
(transparentRed) to be copied to the destination.
Well.. now i guess this is a matter of definition because i would say
that a fully transparent pixel has no color (color is undefined), so no
color can be copied.
My understanding of this is using the color of a fully transparent pixel
is like using an uninitialized variable in c++.
My KoCompositeOpCopy2 never touches undefined colors, so it will not
copy the color of transparent red but just the alpha channel.
The old CompositeOp does it and i think you still know the problem of
the old smudge brush that black color was mixed into the stroke.
It was because of this behavior.
So my suggestion would be to replace this specific test and test only
that the destination pixel has a zero alpha channel, because as i stated
before
the color is IMHO undefined.
I tried to make my CompositeOp pass the test, but every time it passes i
have the problem again that black color is mixed into the result.
So, if you don't like my first suggestion i could restore the old
KoCompositeOpCopy2 and create a new CompositeOp. KoCompositeOpCopySmudge
or something.
But i believe that there is an optimization for the COPY CompositeOp
that uses memcopy when no blending is needed, right?
Creating a new Composite op would result in lower performance then...
More information about the kimageshop
mailing list