On Wed, Oct 6, 2010 at 2:39 PM, Alexia Death <alexiade...@gmail.com> wrote:
> On Wed, Oct 6, 2010 at 8:22 AM, 黄毅 <yi.codepla...@gmail.com> wrote:
>> I'm trying to write a plugin to apply effects like
>> this(http://mrdoob.com/projects/harmony/) to any path.
>> I've done the coding, but it runs too slow, it speed several minutes
>> to draw 7000 lines on my laptop.
>> Currently i use following methods to draw lines:
>>
>>    pdb.gimp_context_set_opacity(alpha)
>>    pdb.gimp_paintbrush_default(drawable, 4, [x1,y1,x2,y2])
>>
>> I guess the overhead of pdb api is too heavy. Is there any alternate
>> way to achieve my purpose?
>> I can't find a proper one in pdb, maybe i should use cairo api to draw
>> a back buffer, then send it to gimp, but i have no idea how to do
>> that.
>>
>
> Several minutes for 7000 strokes to me seems pretty much on par or
> even above with paint core normal performance. You can try drawing on
> a drawable/image that isn't visible, if you aren't already, but other
> than that... Painting is rather expensive operation and is generally
> optimized to keep up with human speeds, that usually at best do 4 or 5
> strokes per second and I have to admit, with large brushes even there
> it sometimes isn't good enough.
>

Make the layer invisible don't make it better, using pycairo does.

With pycairo, drawing random lines with random alpha value on gtk surface,
100000 strokes only take 21 seconds.

for i in range(100000):

   cr = self.window.cairo_create()
   cr.set_source_rgba(0,0,0,random.random())
   cr.move_to(random.randint(0,200), random.randint(0,200))
   cr.line_to(random.randint(0,200), random.randint(0,200))
   cr.stroke()


Now i use pycairo to draw to a memory buffer, then copy to gimp layer,
that's fast enough, the code still needs to be adjusted though.

Thank you very much.

-- 
http://www.yi-programmer.com/blog/
_______________________________________________
Gimp-developer mailing list
Gimp-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer

Reply via email to