The line art algorithm is useful but not always accurate enough and sometimes it can even be counter-productive to fast painters. A technique of advanced painters which Aryeom uses and teaches when she wants to close an area without actually closing the line art (i.e. the non-closed line is a stylistic choice) is to close with a brush the area on the color layer. It has also a great advantage over the line art "smart" closing algorithm: you control the brush style and the exact shape of the closure (therefore something you'd usually have to redo with a closure made by an algorithm as you would likely not find it pretty enough). This new feature takes this technique into account. Basically rather than relying on the closure algorithm, you would close yourself and the tool is able to recognize closure pixels by the color proximity with the fill color. Final point is that this additional step is made after line art computation i.e. in particular the target drawable is not added to the sources for line art logics. This allows to stay fast otherwise the line art would have to recompute itself after each fill. This also shows why the previous commit of moving the line art object was necessary, because a painter would likely want to move regularly from bucket fill to a brush tool to create area closures and we want to avoid recomputation every time.
48 lines
3.2 KiB
C
48 lines
3.2 KiB
C
/* GIMP - The GNU Image Manipulation Program
|
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __GIMP_PICKABLE_CONTIGUOUS_REGION_H__
|
|
#define __GIMP_PICKABLE_CONTIGUOUS_REGION_H__
|
|
|
|
|
|
GeglBuffer * gimp_pickable_contiguous_region_by_seed (GimpPickable *pickable,
|
|
gboolean antialias,
|
|
gfloat threshold,
|
|
gboolean select_transparent,
|
|
GimpSelectCriterion select_criterion,
|
|
gboolean diagonal_neighbors,
|
|
gint x,
|
|
gint y);
|
|
|
|
GeglBuffer * gimp_pickable_contiguous_region_by_color (GimpPickable *pickable,
|
|
gboolean antialias,
|
|
gfloat threshold,
|
|
gboolean select_transparent,
|
|
GimpSelectCriterion select_criterion,
|
|
const GimpRGB *color);
|
|
|
|
GeglBuffer * gimp_pickable_contiguous_region_by_line_art (GimpPickable *pickable,
|
|
GimpLineArt *line_art,
|
|
GeglBuffer *fill_buffer,
|
|
const GimpRGB *fill_color,
|
|
gfloat fill_threshold,
|
|
gint fill_offset_x,
|
|
gint fill_offset_y,
|
|
gint x,
|
|
gint y);
|
|
|
|
#endif /* __GIMP_PICKABLE_CONTIGUOUS_REGION_H__ */
|