/* GdkPixbuf library - transformations * * Copyright (C) 2003 The Free Software Foundation * * Authors: Mark Crichton * Miguel de Icaza * Federico Mena-Quintero * Havoc Pennington * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, see . */ #ifndef GDK_PIXBUF_TRANSFORM_H #define GDK_PIXBUF_TRANSFORM_H #if defined(GDK_PIXBUF_DISABLE_SINGLE_INCLUDES) && !defined (GDK_PIXBUF_H_INSIDE) && !defined (GDK_PIXBUF_COMPILATION) #error "Only can be included directly." #endif #include #include G_BEGIN_DECLS /* Scaling */ /** * GdkInterpType: * @GDK_INTERP_NEAREST: Nearest neighbor sampling; this is the fastest * and lowest quality mode. Quality is normally unacceptable when scaling * down, but may be OK when scaling up. * @GDK_INTERP_TILES: This is an accurate simulation of the PostScript * image operator without any interpolation enabled. Each pixel is * rendered as a tiny parallelogram of solid color, the edges of which * are implemented with antialiasing. It resembles nearest neighbor for * enlargement, and bilinear for reduction. * @GDK_INTERP_BILINEAR: Best quality/speed balance; use this mode by * default. Bilinear interpolation. For enlargement, it is * equivalent to point-sampling the ideal bilinear-interpolated image. * For reduction, it is equivalent to laying down small tiles and * integrating over the coverage area. * @GDK_INTERP_HYPER: This is the slowest and highest quality * reconstruction function. It is derived from the hyperbolic filters in * Wolberg's "Digital Image Warping", and is formally defined as the * hyperbolic-filter sampling the ideal hyperbolic-filter interpolated * image (the filter is designed to be idempotent for 1:1 pixel mapping). * * This enumeration describes the different interpolation modes that * can be used with the scaling functions. @GDK_INTERP_NEAREST is * the fastest scaling method, but has horrible quality when * scaling down. @GDK_INTERP_BILINEAR is the best choice if you * aren't sure what to choose, it has a good speed/quality balance. * * * Cubic filtering is missing from the list; hyperbolic * interpolation is just as fast and results in higher quality. * */ typedef enum { GDK_INTERP_NEAREST, GDK_INTERP_TILES, GDK_INTERP_BILINEAR, GDK_INTERP_HYPER } GdkInterpType; /** * GdkPixbufRotation: * @GDK_PIXBUF_ROTATE_NONE: No rotation. * @GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE: Rotate by 90 degrees. * @GDK_PIXBUF_ROTATE_UPSIDEDOWN: Rotate by 180 degrees. * @GDK_PIXBUF_ROTATE_CLOCKWISE: Rotate by 270 degrees. * * The possible rotations which can be passed to gdk_pixbuf_rotate_simple(). * To make them easier to use, their numerical values are the actual degrees. */ typedef enum { GDK_PIXBUF_ROTATE_NONE = 0, GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE = 90, GDK_PIXBUF_ROTATE_UPSIDEDOWN = 180, GDK_PIXBUF_ROTATE_CLOCKWISE = 270 } GdkPixbufRotation; GDK_PIXBUF_AVAILABLE_IN_ALL void gdk_pixbuf_scale (const GdkPixbuf *src, GdkPixbuf *dest, int dest_x, int dest_y, int dest_width, int dest_height, double offset_x, double offset_y, double scale_x, double scale_y, GdkInterpType interp_type); GDK_PIXBUF_AVAILABLE_IN_ALL void gdk_pixbuf_composite (const GdkPixbuf *src, GdkPixbuf *dest, int dest_x, int dest_y, int dest_width, int dest_height, double offset_x, double offset_y, double scale_x, double scale_y, GdkInterpType interp_type, int overall_alpha); GDK_PIXBUF_AVAILABLE_IN_ALL void gdk_pixbuf_composite_color (const GdkPixbuf *src, GdkPixbuf *dest, int dest_x, int dest_y, int dest_width, int dest_height, double offset_x, double offset_y, double scale_x, double scale_y, GdkInterpType interp_type, int overall_alpha, int check_x, int check_y, int check_size, guint32 color1, guint32 color2); GDK_PIXBUF_AVAILABLE_IN_ALL GdkPixbuf *gdk_pixbuf_scale_simple (const GdkPixbuf *src, int dest_width, int dest_height, GdkInterpType interp_type); GDK_PIXBUF_AVAILABLE_IN_ALL GdkPixbuf *gdk_pixbuf_composite_color_simple (const GdkPixbuf *src, int dest_width, int dest_height, GdkInterpType interp_type, int overall_alpha, int check_size, guint32 color1, guint32 color2); GDK_PIXBUF_AVAILABLE_IN_2_6 GdkPixbuf *gdk_pixbuf_rotate_simple (const GdkPixbuf *src, GdkPixbufRotation angle); GDK_PIXBUF_AVAILABLE_IN_2_6 GdkPixbuf *gdk_pixbuf_flip (const GdkPixbuf *src, gboolean horizontal); G_END_DECLS #endif /* GDK_PIXBUF_TRANSFORM_H */