Bug 229012 - smudge brush gives weird results
Summary: smudge brush gives weird results
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Brush engines (show other bugs)
Version: unspecified
Platform: Compiled Sources Unspecified
: NOR normal
Target Milestone: ---
Assignee: LukasT
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-03-01 11:39 UTC by Halla Rempt
Modified: 2010-09-15 15:25 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
shows blockiness of smudge stroke (184.33 KB, image/png)
2010-03-20 15:31 UTC, Halla Rempt
Details
image showing the smudge reset problem (13.08 KB, image/png)
2010-03-27 18:59 UTC, Cyrille Berger
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Halla Rempt 2010-03-01 11:39:06 UTC
Version:            (using Devel)
Installed from:    Compiled sources

Krita crashes when using the smudge brush on a big image:

Thread 2 (Thread 0xae1ffb70 (LWP 21842)):
[KCrash Handler]
#6  ref (this=<value optimized out>) at /usr/include/QtCore/qatomic_i386.h:120
#7  QString (this=<value optimized out>) at /usr/include/QtCore/qstring.h:715
#8  KoCompositeOp::id (this=<value optimized out>) at /home/boud/kde/src/koffice/libs/pigment/KoCompositeOp.cpp:98
#9  0xb72247b6 in KisPainter::bitBlt (this=0x24f25520, dx=2357, dy=-396, srcdev=..., sx=0, sy=0, sw=200, sh=200) at /home/boud/kde/src/koffice/krita/image/kis_painter.cc:262
#10 0xafa6f045 in KisSmudgeOp::paintAt (this=0x24f2e998, info=...) at /home/boud/kde/src/koffice/krita/plugins/paintops/defaultpaintops/smudge/kis_smudgeop.cpp:183
#11 0xb722a999 in KisPaintOp::paintLine (this=0x24f2e998, pi1=..., pi2=..., savedDist=...) at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:176
#12 0xb722a47b in paintBezierCurve (paintOp=<value optimized out>, pi1=..., control1=..., control2=..., pi2=..., savedDist=...)
    at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:121
#13 0xb722a3ac in paintBezierCurve (paintOp=<value optimized out>, pi1=..., control1=..., control2=..., pi2=..., savedDist=...)
    at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:135
#14 0xb722a3ac in paintBezierCurve (paintOp=<value optimized out>, pi1=..., control1=..., control2=..., pi2=..., savedDist=...)
    at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:135
#15 0xb722a3ac in paintBezierCurve (paintOp=<value optimized out>, pi1=..., control1=..., control2=..., pi2=..., savedDist=...)
    at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:135
#16 0xb722a3ac in paintBezierCurve (paintOp=<value optimized out>, pi1=..., control1=..., control2=..., pi2=..., savedDist=...)
    at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:135
#17 0xb722a3ac in paintBezierCurve (paintOp=<value optimized out>, pi1=..., control1=..., control2=..., pi2=..., savedDist=...)
    at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:135
#18 0xb722a3ac in paintBezierCurve (paintOp=<value optimized out>, pi1=..., control1=..., control2=..., pi2=..., savedDist=...)
    at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:135
#19 0xb722a53e in KisPaintOp::paintBezierCurve (this=0x24f2e998, pi1=..., control1=..., control2=..., pi2=..., savedDist=...) at /home/boud/kde/src/koffice/krita/image/brushengine/kis_paintop.cc:148
#20 0xb721e81d in KisPainter::paintBezierCurve (this=0x24e85778, pi1=..., control1=..., control2=..., pi2=..., savedDist=...) at /home/boud/kde/src/koffice/krita/image/kis_painter.cc:556
#21 0xb7516156 in FreehandPaintBezierJob::run (this=0x24fcfd08) at /home/boud/kde/src/koffice/krita/ui/tool/kis_tool_freehand_p.cpp:110
#22 0xb76387f2 in QThreadPoolThread::run (this=0x24f9bdb8) at concurrent/qthreadpool.cpp:106
#23 0xb76430bf in QThreadPrivate::start (arg=0x24f9bdb8) at thread/qthread_unix.cpp:248
#24 0xb75c86e5 in start_thread () from /lib/libpthread.so.0
#25 0xb75c8600 in ?? () from /lib/libpthread.so.0
Comment 1 Halla Rempt 2010-03-20 15:31:11 UTC
Created attachment 41780 [details]
shows blockiness of smudge stroke
Comment 2 Halla Rempt 2010-03-20 15:33:08 UTC
The relevant code has been rewritten. I not longer get a crash, but there are
some very weird artefacts when smudging. I am using a big image (5000x3000) and
a big smudge brush (~200 pixels). I don't think the result should be so blocky
as shown on the attached screenshot. The blockiness only happens when smudging
upwards, I think.
Comment 3 Cyrille Berger 2010-03-20 17:08:23 UTC
At first I couldn't reproduce, because I was trying with a mouse, but using the distance sensor on size with an "invert" curve, I could reproduce, so it seems, it actually happen when the size of the brush decrease.
Comment 4 Halla Rempt 2010-03-20 17:37:57 UTC
> At first I couldn't reproduce, because I was trying with a mouse, but using the
> distance sensor on size with an "invert" curve, I could reproduce, so it seems,
> it actually happen when the size of the brush decrease.

I didn't even have to do anything with any sensor: just default values, either
mouse or stylus, both showed the issue very strongly.

Boud
Comment 5 Cyrille Berger 2010-03-27 18:51:56 UTC
SVN commit 1108061 by berger:

Fix: blockiness of the smudge op when the size of the brush change

CCBUG: 229012


 M  +6 -4      kis_smudgeop.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1108061
Comment 6 Cyrille Berger 2010-03-27 18:58:20 UTC
This does not remove the blockiness when size is fixed with big brush, and big spacing, because this is not a bug. If you have a big brush, and want a smooth result, you need to lower the spacing.

However, I am not closing the bug, since there is still a problem.

If you setup a smudge brush, with a distance sensor for the size, and move around the canvas, when the size goes from small to big, then the smudge brush start using old information. see attached screenshot for an example. I am unsure at the moment of how to solve the problem.
Comment 7 Cyrille Berger 2010-03-27 18:59:12 UTC
Created attachment 42296 [details]
image showing the smudge reset problem
Comment 8 LukasT 2010-05-10 23:00:47 UTC
Can you check if this is still issue? 

I fixed the test for KisFixedDevice saved as selection and then Cyrille fixed the KisPainter when selection saved in KisFixedDevice.
Comment 9 Halla Rempt 2010-08-15 16:24:28 UTC
Valerie also complained about the results of the smudge brush on the forum.http://forum.kde.org/viewtopic.php?f=137&t=89670&p=167253#p167253
But I think her complaint is different.
Comment 10 pentalis 2010-09-15 14:05:16 UTC
SVN commit 1175603 by jlvergara:

Commit new version of the smudge op paintop that preserves the old behavior at constant brush size, but attempts to fix problems when the brush is resized mid-stroke (example: using stylus).
o Includes cap to opacity to prevent smudging from turning into copying.
o Includes commented-out alternative algorithms for testing (each with their own drawback, like the default one).
o Includes some code style changes and extra comments.
- copyright notice added to kis_smudge_op.h
CCBUG: 229012

 M  +63 -23    kis_smudgeop.cpp  
 M  +2 -0      kis_smudgeop.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1175603
Comment 11 pentalis 2010-09-15 15:25:33 UTC
SVN commit 1175649 by jlvergara:

Last facelift to smudge op:
o Definite algorithm to solve bug 229012 decided, alternatives removed from comments.
o Comments extended and beautified (includes description of the algorithm at the top).
BUG: 229012



 M  +33 -42    kis_smudgeop.cpp  
 M  +1 -0      kis_smudgeop.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1175649