On Mon, 2008-09-29 at 12:10 +0200, Samuel wrote:
> I have been at the GIMP IRC channel and they told me that C is faster
> than Python if I want many pixel ops. I wrote a test plugin in Python
> which copies a layer pixel per pixel to another one and it needs
> several minutes for a vga picture.
> I put it here:
What you are doing there is quite ineffecient. Your plug-in does not
allocate a tile cache. And since you are reading a pixel from one tile,
then writing a pixel to another tile, the tiles have to be re-requested
from the core over and over again. There are several ways you can
(1) Use a tile-cache with two tiles: gimp.tile_cache_ntiles(2).
(2) Change your access pattern to iterate over the layer
tile-by-tile instead of doing it row-by-row. If you want to
keep row-by-row access, then you should increase your tile
cache further so that it can hold 2 rows of tiles.
(3) Instead of reading and writing single pixels, you could
read and write arrays of pixels. For example rows of
GIMP_TILE_WIDTH. This would reduce the overhead you have
to do for each pixel.
Gimp-developer mailing list