lib/free-image/modules/modify.rb in free-image-0.6.2 vs lib/free-image/modules/modify.rb in free-image-0.7.0
- old
+ new
@@ -1,300 +1,300 @@
-module FreeImage
- #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom);
- attach_function('FreeImage_Copy', [:pointer, :int, :int, :int, :int], :pointer)
-
- #DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha);
- attach_function('FreeImage_Paste', [:pointer, :pointer, :int, :int, :int], FreeImage::Boolean)
-
- #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL));
- attach_function('FreeImage_Composite', [:pointer, FreeImage::Boolean, FreeImage::RGBQuad, :pointer], :pointer)
-
- #DLL_API BOOL DLL_CALLCONV FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib);
- #attach_function('FreeImage_PreMultiplyWithAlpha', [:pointer, :int, :int, :int, :int], FreeImage::Boolean)
-
- # DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter);
- attach_function('FreeImage_Rescale', [:pointer, :int, :int, :filter], :pointer)
-
- # DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert FI_DEFAULT(TRUE));
- attach_function('FreeImage_MakeThumbnail', [:pointer, :int, FreeImage::Boolean], :pointer)
-
- #DLL_API BOOL DLL_CALLCONV FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options FI_DEFAULT(0));
- attach_function('FreeImage_FillBackground', [:pointer, :pointer, :int], FreeImage::Boolean)
-
- #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options FI_DEFAULT(0));
- attach_function('FreeImage_EnlargeCanvas', [:pointer, :int, :int, :int, :int, :pointer, :int], :pointer)
-
- # Background Filling Options
-
- # RGBQUAD color is a RGB color (contains no valid alpha channel)
- COLOR_IS_RGB_COLOR = 0x00
-
- # RGBQUAD color is a RGBA color (contains a valid alpha channel)
- COLOR_IS_RGBA_COLOR = 0x01
-
- # For palettized images: lookup equal RGB color from palette
- COLOR_FIND_EQUAL_COLOR = 0x02
-
- # The color's rgbReserved member (alpha) contains the palette index to be used
- COLOR_ALPHA_IS_INDEX = 0x04
-
- # No color lookup is performed
- COLOR_PALETTE_SEARCH_MASK = (COLOR_FIND_EQUAL_COLOR | COLOR_ALPHA_IS_INDEX)
-
- # The \Modify module provides methods that can copy, paste, composite,
- # and enlarge images. It also allows the creation of thumbnails and
- # filling background colors.
- #
- module Modify
- # :call-seq:
- # image.composite(background_bitmap) -> bitmap
- # image.composite(background_bitmap) {|img| block} -> bitmap
- #
- # Composites a transparent foreground image against a background image.
- # The equation for computing a composited sample value is:
- #
- # output = alpha * foreground + (1-alpha) * background
- #
- # Where alpha and the input and output sample values are expressed as fractions
- # in the range 0 to 1. For color images, the computation is done separately
- # for R, G, and B samples.
- #
- # If an optional block is provided, it will be passed the new image as an argument. The
- # image will be automatically closed when the block completes.
- #
- def composite(background_bitmap, &block)
- ptr = FreeImage.FreeImage_Composite(self, false, nil, background_bitmap)
- FreeImage.check_last_error
- self.class.new(ptr, &block)
- end
-
- # :call-seq:
- # image.composite_with_color(background_color) -> bitmap
- # image.composite_with_color(background_color) {|img| block} -> bitmap
- #
- # Composites a transparent foreground image against a background color.
- # The equation for computing a composited sample value is:
- #
- # output = alpha * foreground + (1-alpha) * background
- #
- # Where alpha and the input and output sample values are expressed as fractions
- # in the range 0 to 1. For color images, the computation is done separately
- # for R, G, and B samples.
- #
- # If an optional block is provided, it will be passed the new image as an argument. The
- # image will be automatically closed when the block completes.
- #
- def composite_with_color(background_color, &block)
- ptr = FreeImage.FreeImage_Composite(self, false, background_color, nil)
- FreeImage.check_last_error
- self.class.new(ptr, &block)
- end
-
- # :call-seq:
- # image.copy(left, top, right, bottom) -> bitmap
- # image.copy(left, top, right, bottom) {|img| block} -> bitmap
- #
- # Copy a subpart of the current image. The rectangle defined by the
- # left, top, right, bottom parameters is first normalized such that the
- # value of the left coordinate is less than the right and the top is less
- # than the bottom. Then, the returned bitmap is defined by a width equal to
- # (right - left) and a height equal to (bottom - top).
- #
- # If an optional block is provided, it will be passed the new image as an argument. The
- # image will be automatically closed when the block completes.
- #
- # The function returns the subimage if successful and othewise it returns nil.
- #
- def copy(left, top, right, bottom, &block)
- ptr = FreeImage.FreeImage_Copy(self, left, top, right, bottom)
- FreeImage.check_last_error
- self.class.new(ptr, &block)
- end
-
- # :call-seq:
- # image.enlarge_canvas(left, top, right, bottom, color, options = 0) -> bitmap
- # image.enlarge_canvas(left, top, right, bottom, color, options = 0) {|img| block} -> bitmap
- #
- # Enlarges or shrinks an image selectively per side and fills newly added areas with the
- # specified background color. The common use case is to add borders to an image.
- #
- # To add a border to any of the image's sides, a positive integer value must be passed in
- # any of the parameters left, top, right or bottom. This value represents the border's
- # width in pixels. Newly created parts of the image (the border areas)
- # are filled with the specified color.
- #
- # Specifying a negative integer value for a certain side, will shrink or crop the image on
- # this side. Consequently, specifying zero for a certain side will not
- # change the image's extension on that side.
- #
- # For palletized images, the palette of the current image src is transparently
- # copied to the newly created enlarged or shrunken image, so any color look-ups
- # are performed on this palette.
- #
- # == Parameters:
- #
- # left:: The number of pixels the image should be enlarged on its left side. Negative
- # values shrink the image on its left side.
- # top:: The number of pixels the image should be enlarged on its top side. Negative
- # values shrink the image on its top side.
- # right:: The number of pixels the image should be enlarged on its right side. Negative
- # values shrink the image on its right side.
- # bottom:: The number of pixels, the image should be enlarged on its bottom side.
- # Negative values shrink the image on its bottom side.
- # color:: The color value to be used for filling the image. See #fill_background for
- # more details.
- # options:: Used to control color search process for palletized images. See
- # #fill_background for more details.
- #
- # If an optional block is provided, it will be passed the new image as an argument. The
- # image will be automatically closed when the block completes.
- #
- # Returns a new image on success or nil.
- #
- def enlarge_canvas(left, top, right, bottom, color, options = 0, &block)
- ptr = FreeImage.FreeImage_EnlargeCanvas(self, left, top, right, bottom, color, options)
- FreeImage.check_last_error
- self.class.new(ptr, &block)
- end
-
- # Sets all pixels of an image to the specified color.
- #
- # == Parameters:
- #
- # color:: The color value to be used for filling the image.
- #
- # The type of the color parameter depends on the
- # {image type}[rdoc-ref:FreeImage.image_types]
- #
- # bitmap:: RGBQuad
- # rgb16:: RGB16
- # rgba16:: RGBA16
- # rgbf:: RGBF
- # rgbaf:: RGBFA
- # complex:: Complex
- # others:: A value of the specific type (double, int, etc.).
- #
- # options:: Used to control color search process for palletized images.
- # Allowed values are defined as constants on the FreeImage
- # module and include:
- # COLOR_IS_RGB_COLOR = 0x00
- # COLOR_IS_RGBA_COLOR = 0x01
- # COLOR_FIND_EQUAL_COLOR = 0x02
- # COLOR_ALPHA_IS_INDEX = 0x04
- # COLOR_PALETTE_SEARCH_MASK = (FI_COLOR_FIND_EQUAL_COLOR | FI_COLOR_ALPHA_IS_INDEX)
- #
- # Returns true on success, false on failure.
- #
- def fill_background!(color, options = 0)
- result = FreeImage.FreeImage_FillBackground(self, color, options)
- FreeImage.check_last_error
- result
- end
-
- # :call-seq:
- # bitmap.make_thumbnail(max_pixel_size, convert = true) -> bitmap
- # bitmap.make_thumbnail(max_pixel_size, convert = true) {|img| block} -> bitmap
- #
- # Creates a thumbnail image that fits inside a square of size max_pixel_size,
- # keeping the original aspect ratio intact. Downsampling is done using a bilinear
- # {filter}[rdoc-ref:FreeImage::Sampling.rescale].
- #
- # == Parameters:
- #
- # max_pixel_size:: The maximum width/height of the returned image
- # convert:: When set to true, High Dynamic Range images (FIT_UINT16,
- # FIT_RGB16, FIT_RGBA16, FIT_FLOAT) are transparently converted
- # to standard images (i.e. 8-, 24 or 32-bit images). The
- # default value is true.
- #
- # If an optional block is provided, it will be passed the new image as an argument. The
- # image will be automatically closed when the block completes.
- #
- def make_thumbnail(max_pixel_size, convert = true, &block)
- ptr = FreeImage.FreeImage_MakeThumbnail(self, max_pixel_size, convert)
- FreeImage.check_last_error
- self.class.new(ptr, &block)
- end
-
- # Combines or blends a subpart of another image with the current image.
- #
- # == Parameters:
- #
- # other:: Source subimage
- # left:: Specifies the left position of the sub image.
- # top:: Specifies the top position of the sub image.
- # alpha:: Alpha blend factor. If alpha is 0..255, the other images is
- # alpha blended withe current image. If alpha > 255, then
- # the other image is combined to the current image.
- #
- # The function returns true if successful, otherwise false.
- #
- def paste!(other, left, top, alpha)
- result = FreeImage.FreeImage_Paste(self, other, left, top, alpha)
- FreeImage.check_last_error
- result
- end
-
- # :call-seq:
- # bitmap.rescale(width, height, filter) -> bitmap
- # bitmap.rescale(width, height, filter) {|img| block} -> bitmap -> bitmap
- #
- # Resamples an image to the desired width and height. Resampling changes the
- # pixel dimensions (and therefore display size) of an image.
- # When you downsample (or decrease the number of pixels), information is deleted from
- # the image. When you upsample (or increase the number of pixels), new pixels are
- # added based on color values of existing pixels. You can specify an interpolation
- # filter to determine how pixels are added or deleted using the filter parameter.
- #
- # Returns the newly resample image or nil if the image cannot be resampled.
- #
- # == Parameters:
- #
- # width:: The width of the new image
- # height:: The height of the new image
- # filter:: The filter to use when rescaling
- #
- # Filter options include:
- #
- # :box:: The simplest and fastest of the scaling algorithms. The technique achieves
- # magnification by pixel replication, and minification by sparse point sampling.
- # For large-scale changes, box interpolation produces images with a
- # blocky appearance. In addition, shift errors of up to one-half pixel are
- # possible. These problems make this technique inappropriate when
- # sub-pixel accuracy is required.
- #
- # :bicubic:: An advanced parameterized scaling filter. It uses a cubic
- # to produce very smooth output while maintaining dynamic range
- # and sharpness. Bicubic scaling takes approximately twice the
- # processing time as Bilinear. This filter can be used for any
- # scaling application, especially when scaling factors are 2X
- # or greater.
- #
- # :bilinear:: The second-fastest scaling function. It employs linear interpolation
- # to determine the output image. Bilinear scaling provides reasonably
- # good results at moderate cost for most applications where scale
- # factors are relatively small (4X or less).
- #
- # :bspline:: Produces the smoothest output, but tends to smooth over fine details.
- # This function requires the same processing time as :bicubic filter.
- # It is recommended for applications where the smoothest output is required.
- #
- # :catmullrom:: The Catmull-Rom filter is generally accepted as the best cubic interpolant filter.
- #
- # :lanczos3:: A sinc based filter. It is the most theoretically correct filter
- # that produces the best output for photographic images that do not have
- # sharp transitions in them. However, Lanczos will produce ripple artefacts
- # especially for block text, due to aliasing. It requires three times the
- # processing time of Bilinear. Lanczos is not recommended except in very
- # rare applications using band-limited photographic images with
- # no sharp edges.
- #
- # If an optional block is provided, it will be passed the new image as an argument. The
- # image will be automatically closed when the block completes.
- #
- def rescale(width, height, filter = :bilinear, &block)
- ptr = FreeImage.FreeImage_Rescale(self, width, height, filter)
- FreeImage.check_last_error
- self.class.new(ptr, &block)
- end
- end
+module FreeImage
+ #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Copy(FIBITMAP *dib, int left, int top, int right, int bottom);
+ attach_function('FreeImage_Copy', [:pointer, :int, :int, :int, :int], :pointer)
+
+ #DLL_API BOOL DLL_CALLCONV FreeImage_Paste(FIBITMAP *dst, FIBITMAP *src, int left, int top, int alpha);
+ attach_function('FreeImage_Paste', [:pointer, :pointer, :int, :int, :int], FreeImage::Boolean)
+
+ #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Composite(FIBITMAP *fg, BOOL useFileBkg FI_DEFAULT(FALSE), RGBQUAD *appBkColor FI_DEFAULT(NULL), FIBITMAP *bg FI_DEFAULT(NULL));
+ attach_function('FreeImage_Composite', [:pointer, FreeImage::Boolean, FreeImage::RGBQuad, :pointer], :pointer)
+
+ #DLL_API BOOL DLL_CALLCONV FreeImage_PreMultiplyWithAlpha(FIBITMAP *dib);
+ #attach_function('FreeImage_PreMultiplyWithAlpha', [:pointer, :int, :int, :int, :int], FreeImage::Boolean)
+
+ # DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Rescale(FIBITMAP *dib, int dst_width, int dst_height, FREE_IMAGE_FILTER filter);
+ attach_function('FreeImage_Rescale', [:pointer, :int, :int, :filter], :pointer)
+
+ # DLL_API FIBITMAP *DLL_CALLCONV FreeImage_MakeThumbnail(FIBITMAP *dib, int max_pixel_size, BOOL convert FI_DEFAULT(TRUE));
+ attach_function('FreeImage_MakeThumbnail', [:pointer, :int, FreeImage::Boolean], :pointer)
+
+ #DLL_API BOOL DLL_CALLCONV FreeImage_FillBackground(FIBITMAP *dib, const void *color, int options FI_DEFAULT(0));
+ attach_function('FreeImage_FillBackground', [:pointer, :pointer, :int], FreeImage::Boolean)
+
+ #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_EnlargeCanvas(FIBITMAP *src, int left, int top, int right, int bottom, const void *color, int options FI_DEFAULT(0));
+ attach_function('FreeImage_EnlargeCanvas', [:pointer, :int, :int, :int, :int, :pointer, :int], :pointer)
+
+ # Background Filling Options
+
+ # RGBQUAD color is a RGB color (contains no valid alpha channel)
+ COLOR_IS_RGB_COLOR = 0x00
+
+ # RGBQUAD color is a RGBA color (contains a valid alpha channel)
+ COLOR_IS_RGBA_COLOR = 0x01
+
+ # For palettized images: lookup equal RGB color from palette
+ COLOR_FIND_EQUAL_COLOR = 0x02
+
+ # The color's rgbReserved member (alpha) contains the palette index to be used
+ COLOR_ALPHA_IS_INDEX = 0x04
+
+ # No color lookup is performed
+ COLOR_PALETTE_SEARCH_MASK = (COLOR_FIND_EQUAL_COLOR | COLOR_ALPHA_IS_INDEX)
+
+ # The \Modify module provides methods that can copy, paste, composite,
+ # and enlarge images. It also allows the creation of thumbnails and
+ # filling background colors.
+ #
+ module Modify
+ # :call-seq:
+ # image.composite(background_bitmap) -> bitmap
+ # image.composite(background_bitmap) {|img| block} -> bitmap
+ #
+ # Composites a transparent foreground image against a background image.
+ # The equation for computing a composited sample value is:
+ #
+ # output = alpha * foreground + (1-alpha) * background
+ #
+ # Where alpha and the input and output sample values are expressed as fractions
+ # in the range 0 to 1. For color images, the computation is done separately
+ # for R, G, and B samples.
+ #
+ # If an optional block is provided, it will be passed the new image as an argument. The
+ # image will be automatically closed when the block completes.
+ #
+ def composite(background_bitmap, &block)
+ ptr = FreeImage.FreeImage_Composite(self, false, nil, background_bitmap)
+ FreeImage.check_last_error
+ self.class.new(ptr, &block)
+ end
+
+ # :call-seq:
+ # image.composite_with_color(background_color) -> bitmap
+ # image.composite_with_color(background_color) {|img| block} -> bitmap
+ #
+ # Composites a transparent foreground image against a background color.
+ # The equation for computing a composited sample value is:
+ #
+ # output = alpha * foreground + (1-alpha) * background
+ #
+ # Where alpha and the input and output sample values are expressed as fractions
+ # in the range 0 to 1. For color images, the computation is done separately
+ # for R, G, and B samples.
+ #
+ # If an optional block is provided, it will be passed the new image as an argument. The
+ # image will be automatically closed when the block completes.
+ #
+ def composite_with_color(background_color, &block)
+ ptr = FreeImage.FreeImage_Composite(self, false, background_color, nil)
+ FreeImage.check_last_error
+ self.class.new(ptr, &block)
+ end
+
+ # :call-seq:
+ # image.copy(left, top, right, bottom) -> bitmap
+ # image.copy(left, top, right, bottom) {|img| block} -> bitmap
+ #
+ # Copy a subpart of the current image. The rectangle defined by the
+ # left, top, right, bottom parameters is first normalized such that the
+ # value of the left coordinate is less than the right and the top is less
+ # than the bottom. Then, the returned bitmap is defined by a width equal to
+ # (right - left) and a height equal to (bottom - top).
+ #
+ # If an optional block is provided, it will be passed the new image as an argument. The
+ # image will be automatically closed when the block completes.
+ #
+ # The function returns the subimage if successful and othewise it returns nil.
+ #
+ def copy(left, top, right, bottom, &block)
+ ptr = FreeImage.FreeImage_Copy(self, left, top, right, bottom)
+ FreeImage.check_last_error
+ self.class.new(ptr, &block)
+ end
+
+ # :call-seq:
+ # image.enlarge_canvas(left, top, right, bottom, color, options = 0) -> bitmap
+ # image.enlarge_canvas(left, top, right, bottom, color, options = 0) {|img| block} -> bitmap
+ #
+ # Enlarges or shrinks an image selectively per side and fills newly added areas with the
+ # specified background color. The common use case is to add borders to an image.
+ #
+ # To add a border to any of the image's sides, a positive integer value must be passed in
+ # any of the parameters left, top, right or bottom. This value represents the border's
+ # width in pixels. Newly created parts of the image (the border areas)
+ # are filled with the specified color.
+ #
+ # Specifying a negative integer value for a certain side, will shrink or crop the image on
+ # this side. Consequently, specifying zero for a certain side will not
+ # change the image's extension on that side.
+ #
+ # For palletized images, the palette of the current image src is transparently
+ # copied to the newly created enlarged or shrunken image, so any color look-ups
+ # are performed on this palette.
+ #
+ # == Parameters:
+ #
+ # left:: The number of pixels the image should be enlarged on its left side. Negative
+ # values shrink the image on its left side.
+ # top:: The number of pixels the image should be enlarged on its top side. Negative
+ # values shrink the image on its top side.
+ # right:: The number of pixels the image should be enlarged on its right side. Negative
+ # values shrink the image on its right side.
+ # bottom:: The number of pixels, the image should be enlarged on its bottom side.
+ # Negative values shrink the image on its bottom side.
+ # color:: The color value to be used for filling the image. See #fill_background for
+ # more details.
+ # options:: Used to control color search process for palletized images. See
+ # #fill_background for more details.
+ #
+ # If an optional block is provided, it will be passed the new image as an argument. The
+ # image will be automatically closed when the block completes.
+ #
+ # Returns a new image on success or nil.
+ #
+ def enlarge_canvas(left, top, right, bottom, color, options = 0, &block)
+ ptr = FreeImage.FreeImage_EnlargeCanvas(self, left, top, right, bottom, color, options)
+ FreeImage.check_last_error
+ self.class.new(ptr, &block)
+ end
+
+ # Sets all pixels of an image to the specified color.
+ #
+ # == Parameters:
+ #
+ # color:: The color value to be used for filling the image.
+ #
+ # The type of the color parameter depends on the
+ # {image type}[rdoc-ref:FreeImage.image_types]
+ #
+ # bitmap:: RGBQuad
+ # rgb16:: RGB16
+ # rgba16:: RGBA16
+ # rgbf:: RGBF
+ # rgbaf:: RGBFA
+ # complex:: Complex
+ # others:: A value of the specific type (double, int, etc.).
+ #
+ # options:: Used to control color search process for palletized images.
+ # Allowed values are defined as constants on the FreeImage
+ # module and include:
+ # COLOR_IS_RGB_COLOR = 0x00
+ # COLOR_IS_RGBA_COLOR = 0x01
+ # COLOR_FIND_EQUAL_COLOR = 0x02
+ # COLOR_ALPHA_IS_INDEX = 0x04
+ # COLOR_PALETTE_SEARCH_MASK = (FI_COLOR_FIND_EQUAL_COLOR | FI_COLOR_ALPHA_IS_INDEX)
+ #
+ # Returns true on success, false on failure.
+ #
+ def fill_background!(color, options = 0)
+ result = FreeImage.FreeImage_FillBackground(self, color, options)
+ FreeImage.check_last_error
+ result
+ end
+
+ # :call-seq:
+ # bitmap.make_thumbnail(max_pixel_size, convert = true) -> bitmap
+ # bitmap.make_thumbnail(max_pixel_size, convert = true) {|img| block} -> bitmap
+ #
+ # Creates a thumbnail image that fits inside a square of size max_pixel_size,
+ # keeping the original aspect ratio intact. Downsampling is done using a bilinear
+ # {filter}[rdoc-ref:FreeImage::Sampling.rescale].
+ #
+ # == Parameters:
+ #
+ # max_pixel_size:: The maximum width/height of the returned image
+ # convert:: When set to true, High Dynamic Range images (FIT_UINT16,
+ # FIT_RGB16, FIT_RGBA16, FIT_FLOAT) are transparently converted
+ # to standard images (i.e. 8-, 24 or 32-bit images). The
+ # default value is true.
+ #
+ # If an optional block is provided, it will be passed the new image as an argument. The
+ # image will be automatically closed when the block completes.
+ #
+ def make_thumbnail(max_pixel_size, convert = true, &block)
+ ptr = FreeImage.FreeImage_MakeThumbnail(self, max_pixel_size, convert)
+ FreeImage.check_last_error
+ self.class.new(ptr, &block)
+ end
+
+ # Combines or blends a subpart of another image with the current image.
+ #
+ # == Parameters:
+ #
+ # other:: Source subimage
+ # left:: Specifies the left position of the sub image.
+ # top:: Specifies the top position of the sub image.
+ # alpha:: Alpha blend factor. If alpha is 0..255, the other images is
+ # alpha blended withe current image. If alpha > 255, then
+ # the other image is combined to the current image.
+ #
+ # The function returns true if successful, otherwise false.
+ #
+ def paste!(other, left, top, alpha)
+ result = FreeImage.FreeImage_Paste(self, other, left, top, alpha)
+ FreeImage.check_last_error
+ result
+ end
+
+ # :call-seq:
+ # bitmap.rescale(width, height, filter) -> bitmap
+ # bitmap.rescale(width, height, filter) {|img| block} -> bitmap -> bitmap
+ #
+ # Resamples an image to the desired width and height. Resampling changes the
+ # pixel dimensions (and therefore display size) of an image.
+ # When you downsample (or decrease the number of pixels), information is deleted from
+ # the image. When you upsample (or increase the number of pixels), new pixels are
+ # added based on color values of existing pixels. You can specify an interpolation
+ # filter to determine how pixels are added or deleted using the filter parameter.
+ #
+ # Returns the newly resample image or nil if the image cannot be resampled.
+ #
+ # == Parameters:
+ #
+ # width:: The width of the new image
+ # height:: The height of the new image
+ # filter:: The filter to use when rescaling
+ #
+ # Filter options include:
+ #
+ # :box:: The simplest and fastest of the scaling algorithms. The technique achieves
+ # magnification by pixel replication, and minification by sparse point sampling.
+ # For large-scale changes, box interpolation produces images with a
+ # blocky appearance. In addition, shift errors of up to one-half pixel are
+ # possible. These problems make this technique inappropriate when
+ # sub-pixel accuracy is required.
+ #
+ # :bicubic:: An advanced parameterized scaling filter. It uses a cubic
+ # to produce very smooth output while maintaining dynamic range
+ # and sharpness. Bicubic scaling takes approximately twice the
+ # processing time as Bilinear. This filter can be used for any
+ # scaling application, especially when scaling factors are 2X
+ # or greater.
+ #
+ # :bilinear:: The second-fastest scaling function. It employs linear interpolation
+ # to determine the output image. Bilinear scaling provides reasonably
+ # good results at moderate cost for most applications where scale
+ # factors are relatively small (4X or less).
+ #
+ # :bspline:: Produces the smoothest output, but tends to smooth over fine details.
+ # This function requires the same processing time as :bicubic filter.
+ # It is recommended for applications where the smoothest output is required.
+ #
+ # :catmullrom:: The Catmull-Rom filter is generally accepted as the best cubic interpolant filter.
+ #
+ # :lanczos3:: A sinc based filter. It is the most theoretically correct filter
+ # that produces the best output for photographic images that do not have
+ # sharp transitions in them. However, Lanczos will produce ripple artefacts
+ # especially for block text, due to aliasing. It requires three times the
+ # processing time of Bilinear. Lanczos is not recommended except in very
+ # rare applications using band-limited photographic images with
+ # no sharp edges.
+ #
+ # If an optional block is provided, it will be passed the new image as an argument. The
+ # image will be automatically closed when the block completes.
+ #
+ def rescale(width, height, filter = :bilinear, &block)
+ ptr = FreeImage.FreeImage_Rescale(self, width, height, filter)
+ FreeImage.check_last_error
+ self.class.new(ptr, &block)
+ end
+ end
end
\ No newline at end of file