* app/core/gimp-transform-region.c: (supersample_dtest): do not invoke
supersampling for linear, bicubic and lanczos until the largest
horizontal/vertical difference between transformed pixel corners goes
above sqrt(2) (this ensures interpolation instead of supersampling is
used for rotation.)
svn path=/trunk/; revision=23509
2007-09-03 Michael Natterer <mitch@gimp.org>
* app/core/gimp-transform-region.c: Applied slightly reformatted
patch by Jakub Friedl and Daniel Hornung which ROUND()s the
floating point result values before assigning them to integers to
avoid reducing the output space to [0..254] (thus darkening the
image). Fixes bug #472806.
svn path=/trunk/; revision=23451
2007-02-26 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c (normalize_coords): removed a
redundant condition and marked another one as unlikely.
svn path=/trunk/; revision=22008
2007-02-26 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c: moved common code to an
inlined function. gimp_transform_region_lanczos() now also does
supersampling. Removed boundary checks and clamping as
PixelSurround and read_pixel_data_1() already deal with this for
us. Gives another small speedup.
svn path=/trunk/; revision=21999
2007-02-26 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c (gimp_transform_region_lanczos):
use PixelSurround instead of read_pixel_data_1(). This yields a
dramatic speedup.
svn path=/trunk/; revision=21998
2007-02-26 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c (gimp_transform_region_lanczos):
iterate over tiles instead of rows in the destination buffer.
svn path=/trunk/; revision=21997
2007-02-24 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c (gimp_transform_region): moved
linear and cubic code to their own functions and let them iterate
over tiles instead of rows in the destination buffer.
svn path=/trunk/; revision=21996
2007-02-24 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c
(gimp_transform_region_nearest):
operate on tiles instead of iterating row by row.
svn path=/trunk/; revision=21988
2007-02-24 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c (gimp_transform_region):
moved nearest-neighbor code to it's own function to improve
performance and readability.
svn path=/trunk/; revision=21987
2007-02-23 Sven Neumann <sven@gimp.org>
* app/core/gimp-transform-region.c (gimp_transform_region):
moved
lanczos code into it's own function to improve readability.
svn path=/trunk/; revision=21986
2007-02-23 Sven Neumann <sven@gimp.org>
* app/base/pixel-surround.[ch]: do less tile lock and release
operations by reusing the last locked tile if possible. Allow to
call pixel_surround_lock() several times without unlocking.
* app/core/gimp-transform-region.c: don't unlock the PixelSurround
so that the locked tile can be reused. Yields about 30% speedup
for transformations.
svn path=/trunk/; revision=21984
2007-02-22 Sven Neumann <sven@gimp.org>
* app/base/base-types.h
* app/base/pixel-surround.[ch]: hide PixelSurround struct and
cleaned up the PixelSurround API.
* app/core/gimp-transform-region.c: changed accordingly. Also
sprinkled some const qualifiers.
svn path=/trunk/; revision=21978
2006-10-26 Michael Natterer <mitch@gimp.org>
* app/core/gimp-transform-region.c (gimp_transform_region): make
lanczos work for orig_tiles that don't start at 0,0. Please folks,
some basic testing of anything but the most simple use case next
time.
2006-10-26 Michael Natterer <mitch@gimp.org>
* app/core/Makefile.am
* app/core/gimp-transform-region.[ch]: new files containing
gimp_transform_region() and all its voodoo utility functions.
* app/core/gimpdrawable-transform.c: removed the stuff here.
2006-10-26 Michael Natterer <mitch@gimp.org>
* app/core/gimpdrawable-transform.c
(gimp_drawable_transform_tiles_affine): factored out new function
gimp_transform_region() that contains all the actual transform
magic, doesn't use a GimpDrawable, and transforms into a passed
PixelRegion. Will be used for perspective clone after some more
changes.
2006-10-25 Michael Natterer <mitch@gimp.org>
* app/core/gimpdrawable-transform.c
(gimp_drawable_transform_tiles_affine): fix indentation and
spacing in the lanczos code. Removed trailing whitespace.
2006-08-29 Sven Neumann <sven@gimp.org>
* libgimpbase/Makefile.am
* libgimpbase/gimpbase.h
* libgimpbase/gimprectangle.[ch]: added new files that hold
gimp_rectangle_intersect(), factored out of the core.
* libgimpbase/gimpbase.def: updated.
* app/core/gimp-edit.c
* app/core/gimp-utils.c
* app/core/gimp-utils.h
* app/core/gimpchannel-combine.c
* app/core/gimpdrawable-foreground-extract.c
* app/core/gimpdrawable-transform.c
* app/core/gimpdrawable.c
* app/core/gimpimage-preview.c
* app/core/gimplayer.c
* app/core/gimpscanconvert.c
* app/display/gimpdisplayshell-draw.c: changed includes accordingly.
* libgimp/gimpdrawablepreview.c: don't duplicate
gimp_rectangle_intersect() here, use the function in libgimpbase.
* app/base/siox.c: use gimp_rectangle_intersect() to reduce the
working area to the region of interest. Fixes bug #340422.
* app/tools/gimptransformtool.c
* app/tools/gimpfliptool.c
* app/core/gimpdrawabletransform.c: avoid messages and critical
error when transforming a drawable that does not intersect
the selection.
2005-01-21 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable-transform.c: applied a patch from Geert
Jordaens that seems to fix drawable transformation using the new
Lanczos interpolation routine :)
2005-01-19 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable-transform.c: applied a patch from Geert
Jordaens that fixes the crash in the drawable transformations
using the Lanczos interpolation type. The result is somewhat wrong
though :(
2005-01-15 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable-transform.c
* app/paint-funcs/scale-funcs.c: minor cleanups to the new Lanczos
interpolation routines. Drawable transformations do still crash :(
2005-01-11 Sven Neumann <neumann@jpk.com>
* app/base/base-enums.[ch]
* app/core/gimpdrawable-transform.c
* app/core/gimpdrawable.c
* app/paint-funcs/Makefile.am
* app/paint-funcs/paint-funcs.[ch]
* app/paint-funcs/scale-funcs.[ch]: applied patch by Geert Jordaens
(after a good deal of reformatting for coding style compliance).
This factors the scale routines into their own file and adds a
sinc-based (Lanczos) interpolation routine (bug #162250).
2004-11-01 Michael Natterer <mitch@gimp.org>
* app/core/gimpdrawable-transform.[ch]
(gimp_drawable_transform_flip): renamed "center" to "auto_center".
(gimp_drawable_transform_rotate): added missing parameters so it
can be used for a to-be-added PDB wrapper offering a
GimpRotationType based rotate API.
Both functions: always clip when transforming a whole channel,
since they must keep their size.
(gimp_drawable_transform_affine): actually forward the passed
"clip_result" to transform_tiles_affine() instead of always FALSE.
2004-10-26 Sven Neumann <sven@gimp.org>
Added new drawable transform API to the PDB. Largely based on
patches from Joao S. O. Bueno. Fixes bug #137053.
* app/core/gimpdrawable-transform.[ch]: added missing parameters
to gimp_drawable_transform_flip().
* tools/pdbgen/pdb/transform_tools.pdb: changed accordinly.
* app/base/base-enums.h
* app/core/core-enums.h: removed pdp-skip for GimpInterpolationType
and GimpTransformDirection enums.
* libgimp/gimpenums.h
* plug-ins/pygimp/gimpenums.py
* tools/pdbgen/enums.pl
* tools/pdbgen/groups.pl: regenerated.
* tools/pdbgen/Makefile.am
* tools/pdbgen/pdb/drawable_transform.pdb: added new file defining
the new PDB calls.
* app/pdb/Makefile.am
* app/pdb/drawable_transform_cmds.c
* app/pdb/internal_procs.c
* app/pdb/transform_tools_cmds.c
* libgimp/gimp_pdb.h
* libgimp/gimpdrawabletransform_pdb.[ch]: regenerated.
2004-08-31 Michael Natterer <mitch@gimp.org>
* app/core/gimpdrawable-transform.[ch]: added GimpProgress
parameter to gimp_drawable_transform_affine().
* tools/pdbgen/pdb/edit.pdb
* tools/pdbgen/pdb/transform_tools.pdb: show progress for "blend"
and all transform functions.
* app/pdb/edit_cmds.c
* app/pdb/transform_tools_cmds.c: regenerated.
2004-08-10 Michael Natterer <mitch@gimp.org>
Redid the whole internal progress stuff: don't pass around
progress_callback and progress_data; instead, provide a
pointer to a GimpProgressInterface which can be implemented
by a variety of backends.
Addresses (but not yet fixes) bugs #6010, #97266 and #135185.
* app/display/Makefile.am
* app/display/gimpprogress.[ch]: removed the old progress hack.
* app/core/Makefile.am
* app/core/core-types.h
* app/core/gimpprogress.[ch]: implement GimpProgressInterface.
* app/widgets/Makefile.am
* app/widgets/widgets-types.h
* app/widgets/gimpprogressdialog.[ch]: the standalone progress
dialog as widget implementing GimpProgressInterface.
* app/display/gimpdisplay.c
* app/display/gimpstatusbar.[ch]
* app/widgets/gimpfiledialog.[ch]
* app/widgets/gimpthumbbox.[ch]: added GimpProgressInterface
implementation to these classes.
* app/core/gimp-gui.[ch]
* app/gui/gui-vtable.c: replaced the old progress vtable entries
by two new to create and destroy a GimpProgressDialog in case
no other progress is available.
* app/pdb/procedural_db.[ch]
* app/plug-in/plug-in-run.[ch]
* tools/pdbgen/app.pl: pass a GimpProgress to all PDB wrappers and
all plug-ins.
* app/plug-in/plug-in.[ch]
* app/plug-in/plug-ins.c
* app/plug-in/plug-in-message.c
* app/plug-in/plug-in-progress.c: handle the case there the
plug-in was crated with a progress as well as the case where it
wasn't.
* app/app_procs.c
* app/batch.c
* app/xcf/xcf.c
* app/file/file-open.[ch]
* app/file/file-save.[ch]
* app/widgets/gimphelp.c
* app/widgets/gimpbrushselect.c
* app/widgets/gimpfontselect.c
* app/widgets/gimpgradientselect.c
* app/widgets/gimppaletteselect.c
* app/widgets/gimppatternselect.c: changed accordingly.
* app/core/gimpimagefile.[ch]
* app/display/gimpdisplayshell-dnd.c
* app/gui/file-open-dialog.c
* app/gui/file-open-location-dialog.c
* app/gui/file-save-dialog.c
* app/widgets/gimplayertreeview.c
* app/widgets/gimptoolbox-dnd.c: pass a GimpProgress to all file
related functions. Embed the progress in the file dialog where
possible.
* app/core/gimpdrawable-blend.[ch]
* app/core/gimpdrawable-transform.[ch]
* app/core/gimpimage-convert.[ch]
* app/core/gimpimage-flip.[ch]
* app/core/gimpimage-resize.[ch]
* app/core/gimpimage-rotate.[ch]
* app/core/gimpimage-scale.[ch]
* app/core/gimpitem-linked.[ch]
* app/core/gimpitem.[ch]
* app/core/gimpchannel.c
* app/core/gimpdrawable.c
* app/core/gimplayer.c
* app/core/gimpselection.c
* app/vectors/gimpvectors.c: replaced callback/data by GimpProgress.
* app/tools/gimpblendtool.c
* app/tools/gimptransformtool.c
* app/gui/convert-dialog.c
* app/actions/documents-commands.c
* app/actions/file-commands.c
* app/actions/image-commands.c
* app/actions/layers-commands.c
* app/actions/plug-in-commands.c
* app/actions/vectors-commands.c
* tools/pdbgen/pdb/convert.pdb
* tools/pdbgen/pdb/edit.pdb
* tools/pdbgen/pdb/image.pdb
* tools/pdbgen/pdb/layer.pdb: changed callers accordingly.
* app/pdb/*_cmds.c: regenerated.
2004-07-29 Dave Neary <bolsh@gimp.org>
* app/core/gimpdrawable-transform.c: Stop signed ints overflowing
while getting the mean by replacing (a + b) / 2 with a / 2 + b / 2.
Fixes bug #128594 for drawables less than 32K wide.
2004-06-17 Philip Lafleur <plafleur@cvs.gnome.org>
* app/core/gimpdrawable-transform.c (gimp_drawable_transform_tiles_affine):
Make transforms (most notably perspective transforms) conform exactly
to specified edges. Includes a patch by David Gowers. Fixes bug #144352.
2004-06-15 Philip Lafleur <plafleur@cvs.gnome.org>
* app/core/gimpdrawable-transform.c (gimp_drawable_transform_tiles_affine):
Don't round texture coordinates when not using interpolation. Fixes
bug #144352 for the nearest neighbor case only.
2004-06-14 Sven Neumann <sven@gimp.org>
* app/core/gimpdrawable-transform.c: declared
gimp_drawable_transform_cubic() as inline function. Makes
sample_cubic() run about 10% faster and causes a 7% speedup on
cubic transformations.
* app/paint-funcs/paint-funcs.c (border_region): avoid an
unnecessary memory allocation.
2004-04-13 Michael Natterer <mitch@gimp.org>
Moved the calls to floating_sel_relax()/rigor() from various
places to two single spots in the core where they are actually
needed. Fixes bug #138356 (which was caused by the projection
being triggered in the middle of changing the floating selection's
size or the size of the drawable it is attached to). This commit
effectively removes floating selection fiddling from the core's
public API.
* app/core/gimpdrawable.[ch] (gimp_drawable_has_floating_sel): new
function which returns TRUE if there is a floating selection
attached to the drawable.
* app/core/gimpdrawable.c (gimp_drawable_translate)
(gimp_drawable_set_tiles_full): if the drawable *has* a floating
selection, relax/rigor it before/after modifying the drawable.
* app/core/gimplayer.c (gimp_layer_translate)
(gimp_layer_set_tiles): if the layer *is* the floating selection,
relax/rigor it before/after modifying it.
* app/core/gimpdrawable-transform.c
* app/core/gimpimage-convert.c
* app/core/gimpimage-crop.c
* app/core/gimpimage-flip.c
* app/core/gimpimage-resize.c
* app/core/gimpimage-rotate.c
* app/core/gimpimage-scale.c
* app/gui/layers-commands.c
* app/tools/gimpeditselectiontool.c
* tools/pdbgen/pdb/layer.pdb: removed calls to
floating_sel_rigor()/relax() all over the place. Also removed
lots of undo groups which are obsolete now.
* app/pdb/layer_cmds.c: regenerated.
2004-03-31 Michael Natterer <mitch@gimp.org>
* app/core/gimp-transform-utils.c
(gimp_transform_matrix_perspective): make sure 0.0/0.0 results
in 1.0, not NaN.
* app/core/gimpdrawable-transform.c
(gimp_drawable_transform_tiles_affine): instead of returning NULL
if the transformation shrinks the tiles completely away, return at
least the pixel (or the row or column of pixels) which best covers
the sub-pixel area of the transform result:
- Changed rounding of the transformed coordinates from RINT()
to floor()/ceil() so we don't cut off sub-pixel portions of the
transform result.
- Force the minimal size if the changed rounding didn't help.
Fixes bug #138117.
Also added paranoia code which falls back to clip_result if the
passed matrix produces NaN coordinates (copied the FINITE() macro
from image_cmds.c).