lib/free-image/modules/conversions.rb in free-image-0.6.2 vs lib/free-image/modules/conversions.rb in free-image-0.7.0

- old
+ new

@@ -1,254 +1,254 @@ -module FreeImage - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo4Bits(FIBITMAP *dib); - attach_function('FreeImage_ConvertTo4Bits', [:pointer], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib); - attach_function('FreeImage_ConvertTo8Bits', [:pointer], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToGreyscale(FIBITMAP *dib); - attach_function('FreeImage_ConvertToGreyscale', [:pointer], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib); - attach_function('FreeImage_ConvertTo16Bits555', [:pointer], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib); - attach_function('FreeImage_ConvertTo16Bits565', [:pointer], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib); - attach_function('FreeImage_ConvertTo24Bits', [:pointer], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib); - attach_function('FreeImage_ConvertTo32Bits', [:pointer], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm); - attach_function('FreeImage_Dither', [:pointer, :dither], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T); - attach_function('FreeImage_Threshold', [:pointer, :byte], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE)); - attach_function('FreeImage_ConvertToStandardType', [:pointer, FreeImage::Boolean], :pointer) - - #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE)); - attach_function('FreeImage_ConvertToType', [:pointer, :image_type, FreeImage::Boolean], :pointer) - - module Conversions - # :call-seq: - # image.convert_to_4bits -> bitmap - # image.convert_to_4bits {|img| block} -> bitmap - # - # Converts a bitmap to 4 bits. If the bitmap is a high-color (16, 24 or 32-bit), - # monochrome or greyscale bitmap (1 or 8-bit) the end result will be a greyscale bitmap. - # A 1-bit bitmap will become a palletized bitmap. - # - # Note that "greyscale" means that the resulting bitmap will have grey colors, - # but the palette won't be a linear greyscale palette. Thus, FreeImage::Bitmap.color_type - # will return a :palette. - # - # 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 convert_to_4bits(&block) - ptr = FreeImage.FreeImage_ConvertTo4Bits(self) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_8bits -> bitmap - # image.convert_to_8bits {|img| block} -> bitmap - # - # Converts a bitmap to 8 bits. If the bitmap is a high-color (16, 24 or 32-bit), - # monochrome or greyscale bitmap (1 or 4-bit) the end result will be a greyscale bitmap. - # A 1-bit or 4-bit bitmap will become a palletized bitmap. - # - # For 16-bit greyscale images (images whose type is :uint16), conversion is done by - # dividing the 16-bit channel by 256 (see also FreeImage::Bitmap.ConvertToStandardType). - # A nil value is returned for other non-standard bitmap types. - # - # 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 convert_to_8bits(&block) - ptr = FreeImage.FreeImage_ConvertTo8Bits(self) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_greyscale -> bitmap - # image.convert_to_greyscale {|img| block} -> bitmap - # - # Converts a bitmap to a 8-bit greyscale image with a linear ramp. Contrary to - # the FreeImage::Conversions#convert_to_8bits function, 1-, 4- and 8-bit palletized - # bitmaps are correctly converted, as well as images with a :minis_white color type. - # - # 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 convert_to_greyscale(&block) - ptr = FreeImage.FreeImage_ConvertToGreyscale(self) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_16bits_555 -> bitmap - # image.convert_to_16bits_555 {|img| block} -> bitmap - # - # Converts a bitmap to 16 bits, where each pixel has a color pattern of - # 5 bits red, 5 bits green and 5 bits blue. One bit in each pixel is - # unused. - # - # 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 convert_to_16bits_555(&block) - ptr = FreeImage.FreeImage_ConvertTo16Bits555(self) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_16bits_565 -> bitmap - # image.convert_to_16bits_565 {|img| block} -> bitmap - # - # Converts a bitmap to 16 bits, where each pixel has a color pattern of - # 5 bits red, 6 bits green and 5 bits blue. One bit in each pixel is - # unused. - # - # 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 convert_to_16bits_565(&block) - ptr = FreeImage.FreeImage_ConvertTo16Bits565(self) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_24bits -> bitmap - # image.convert_to_24bits {|img| block} -> bitmap - # - # Converts a bitmap to 24 bits. For 48-bit RGB images, conversion is done - # by dividing each 16-bit channel by 256. A nil value is returned for - # other non-standard bitmap types. - # - # 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 convert_to_24bits(&block) - ptr = FreeImage.FreeImage_ConvertTo24Bits(self) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_32bits -> bitmap - # image.convert_to_32bits {|img| block} -> bitmap - # - # Converts a bitmap to 32 bits. For 48-bit RGB images, conversion is done - # by dividing each 16-bit channel by 256 and by setting the alpha channel - # to an opaque value (0xFF). For 64-bit RGBA images, conversion is done - # by dividing each 16-bit channel by 256. A nil value is returned for - # other non-standard bitmap types. - # - # 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 convert_to_32bits(&block) - ptr = FreeImage.FreeImage_ConvertTo32Bits(self) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_standard_type(scale_linear = true) -> bitmap - # image.convert_to_standard_type(scale_linear = true) {|img| block} -> bitmap - # - # Converts a non standard image whose color type is :minis_black to a - # standard 8-bit greyscale image. When the scale_linear parameter is - # true, conversion is done by scaling linearly each pixel value from [min, max] - # to an integer value between [0..255], where min and max are the minimum - # and maximum pixel values in the image. When scale_linear is false, conversion - # is done by rounding each pixel value to an integer between [0..255]. Rounding - # is done using the following formula: - # - # dst_pixel = (BYTE) MIN(255, MAX(0, q)) where int q = int(src_pixel + 0.5) - # - # For standard bitmaps, a clone of the original bitmap is returned. - # For complex images, the magnitude is extracted as a double image and then converted - # according to the scale parameter. - # - # 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 convert_to_standard_type(scale_linear = true, &block) - ptr = FreeImage.FreeImage_ConvertToStandardType(self, scale_linear) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.convert_to_type(dst_image_type, scale_linear = true) -> bitmap - # image.convert_to_type(dst_image_type, scale_linear = true) {|img| block} -> bitmap - # - # Converts a bitmap to the specified destination image type. When the image_type - # is equal to :bitmap, the function calls FreeImage::Converstions#convert_to_standard_type. - # Otherwise, conversion is done using standard C language casting conventions. When - # a conversion is not allowed, a nil value is returned and an error is thrown. - # Please refer to the FreeImage documentation for allowed conversions. - # - # 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 convert_to_type(dst_image_type, scale_linear = true, &block) - ptr = FreeImage.FreeImage_ConvertToType(self, dst_image_type, scale_linear) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.dither(algorithm) -> bitmap - # image.dither(algorithm) {|img| block} -> bitmap - # - # Converts a bitmap to 1-bit monochrome bitmap using the specified - # {dithering}[rdoc-ref:FreeImage.dithers] algorithm. For 1-bit input - # bitmaps, the function clones the input bitmap and builds a - # monochrome palette. Otherwise the function first converts the - # bitmap to a 8-bit greyscale bitmap. - # - # 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 dither(algorithm, &block) - ptr = FreeImage.FreeImage_Dither(self, algorithm) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - - # :call-seq: - # image.threshold(value) -> bitmap - # image.threshold(value) {|img| block} -> bitmap - # - # Converts a bitmap to 1-bit monochrome bitmap using a threshold value - # between 0 and 255. The function first converts the bitmap to a 8-bit - # greyscale bitmap. Then any brightness level that is less than the - # threshold is set to zero and any value above is set to 1. - # For 1-bit input bitmaps, the function clones the input bitmap and - # builds a monochrome palette. - # - # 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 threshold(value, &block) - value = Integer(value) - unless (0..255).include?(value) - raise(RangeError, "Value is out of range 0..255. Value: #{value}") - end - ptr = FreeImage.FreeImage_Threshold(self, value) - FreeImage.check_last_error - self.class.new(ptr, &block) - end - end +module FreeImage + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo4Bits(FIBITMAP *dib); + attach_function('FreeImage_ConvertTo4Bits', [:pointer], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo8Bits(FIBITMAP *dib); + attach_function('FreeImage_ConvertTo8Bits', [:pointer], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToGreyscale(FIBITMAP *dib); + attach_function('FreeImage_ConvertToGreyscale', [:pointer], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits555(FIBITMAP *dib); + attach_function('FreeImage_ConvertTo16Bits555', [:pointer], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo16Bits565(FIBITMAP *dib); + attach_function('FreeImage_ConvertTo16Bits565', [:pointer], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo24Bits(FIBITMAP *dib); + attach_function('FreeImage_ConvertTo24Bits', [:pointer], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertTo32Bits(FIBITMAP *dib); + attach_function('FreeImage_ConvertTo32Bits', [:pointer], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Dither(FIBITMAP *dib, FREE_IMAGE_DITHER algorithm); + attach_function('FreeImage_Dither', [:pointer, :dither], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_Threshold(FIBITMAP *dib, BYTE T); + attach_function('FreeImage_Threshold', [:pointer, :byte], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToStandardType(FIBITMAP *src, BOOL scale_linear FI_DEFAULT(TRUE)); + attach_function('FreeImage_ConvertToStandardType', [:pointer, FreeImage::Boolean], :pointer) + + #DLL_API FIBITMAP *DLL_CALLCONV FreeImage_ConvertToType(FIBITMAP *src, FREE_IMAGE_TYPE dst_type, BOOL scale_linear FI_DEFAULT(TRUE)); + attach_function('FreeImage_ConvertToType', [:pointer, :image_type, FreeImage::Boolean], :pointer) + + module Conversions + # :call-seq: + # image.convert_to_4bits -> bitmap + # image.convert_to_4bits {|img| block} -> bitmap + # + # Converts a bitmap to 4 bits. If the bitmap is a high-color (16, 24 or 32-bit), + # monochrome or greyscale bitmap (1 or 8-bit) the end result will be a greyscale bitmap. + # A 1-bit bitmap will become a palletized bitmap. + # + # Note that "greyscale" means that the resulting bitmap will have grey colors, + # but the palette won't be a linear greyscale palette. Thus, FreeImage::Bitmap.color_type + # will return a :palette. + # + # 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 convert_to_4bits(&block) + ptr = FreeImage.FreeImage_ConvertTo4Bits(self) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_8bits -> bitmap + # image.convert_to_8bits {|img| block} -> bitmap + # + # Converts a bitmap to 8 bits. If the bitmap is a high-color (16, 24 or 32-bit), + # monochrome or greyscale bitmap (1 or 4-bit) the end result will be a greyscale bitmap. + # A 1-bit or 4-bit bitmap will become a palletized bitmap. + # + # For 16-bit greyscale images (images whose type is :uint16), conversion is done by + # dividing the 16-bit channel by 256 (see also FreeImage::Bitmap.ConvertToStandardType). + # A nil value is returned for other non-standard bitmap types. + # + # 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 convert_to_8bits(&block) + ptr = FreeImage.FreeImage_ConvertTo8Bits(self) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_greyscale -> bitmap + # image.convert_to_greyscale {|img| block} -> bitmap + # + # Converts a bitmap to a 8-bit greyscale image with a linear ramp. Contrary to + # the FreeImage::Conversions#convert_to_8bits function, 1-, 4- and 8-bit palletized + # bitmaps are correctly converted, as well as images with a :minis_white color type. + # + # 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 convert_to_greyscale(&block) + ptr = FreeImage.FreeImage_ConvertToGreyscale(self) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_16bits_555 -> bitmap + # image.convert_to_16bits_555 {|img| block} -> bitmap + # + # Converts a bitmap to 16 bits, where each pixel has a color pattern of + # 5 bits red, 5 bits green and 5 bits blue. One bit in each pixel is + # unused. + # + # 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 convert_to_16bits_555(&block) + ptr = FreeImage.FreeImage_ConvertTo16Bits555(self) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_16bits_565 -> bitmap + # image.convert_to_16bits_565 {|img| block} -> bitmap + # + # Converts a bitmap to 16 bits, where each pixel has a color pattern of + # 5 bits red, 6 bits green and 5 bits blue. One bit in each pixel is + # unused. + # + # 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 convert_to_16bits_565(&block) + ptr = FreeImage.FreeImage_ConvertTo16Bits565(self) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_24bits -> bitmap + # image.convert_to_24bits {|img| block} -> bitmap + # + # Converts a bitmap to 24 bits. For 48-bit RGB images, conversion is done + # by dividing each 16-bit channel by 256. A nil value is returned for + # other non-standard bitmap types. + # + # 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 convert_to_24bits(&block) + ptr = FreeImage.FreeImage_ConvertTo24Bits(self) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_32bits -> bitmap + # image.convert_to_32bits {|img| block} -> bitmap + # + # Converts a bitmap to 32 bits. For 48-bit RGB images, conversion is done + # by dividing each 16-bit channel by 256 and by setting the alpha channel + # to an opaque value (0xFF). For 64-bit RGBA images, conversion is done + # by dividing each 16-bit channel by 256. A nil value is returned for + # other non-standard bitmap types. + # + # 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 convert_to_32bits(&block) + ptr = FreeImage.FreeImage_ConvertTo32Bits(self) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_standard_type(scale_linear = true) -> bitmap + # image.convert_to_standard_type(scale_linear = true) {|img| block} -> bitmap + # + # Converts a non standard image whose color type is :minis_black to a + # standard 8-bit greyscale image. When the scale_linear parameter is + # true, conversion is done by scaling linearly each pixel value from [min, max] + # to an integer value between [0..255], where min and max are the minimum + # and maximum pixel values in the image. When scale_linear is false, conversion + # is done by rounding each pixel value to an integer between [0..255]. Rounding + # is done using the following formula: + # + # dst_pixel = (BYTE) MIN(255, MAX(0, q)) where int q = int(src_pixel + 0.5) + # + # For standard bitmaps, a clone of the original bitmap is returned. + # For complex images, the magnitude is extracted as a double image and then converted + # according to the scale parameter. + # + # 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 convert_to_standard_type(scale_linear = true, &block) + ptr = FreeImage.FreeImage_ConvertToStandardType(self, scale_linear) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.convert_to_type(dst_image_type, scale_linear = true) -> bitmap + # image.convert_to_type(dst_image_type, scale_linear = true) {|img| block} -> bitmap + # + # Converts a bitmap to the specified destination image type. When the image_type + # is equal to :bitmap, the function calls FreeImage::Converstions#convert_to_standard_type. + # Otherwise, conversion is done using standard C language casting conventions. When + # a conversion is not allowed, a nil value is returned and an error is thrown. + # Please refer to the FreeImage documentation for allowed conversions. + # + # 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 convert_to_type(dst_image_type, scale_linear = true, &block) + ptr = FreeImage.FreeImage_ConvertToType(self, dst_image_type, scale_linear) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.dither(algorithm) -> bitmap + # image.dither(algorithm) {|img| block} -> bitmap + # + # Converts a bitmap to 1-bit monochrome bitmap using the specified + # {dithering}[rdoc-ref:FreeImage.dithers] algorithm. For 1-bit input + # bitmaps, the function clones the input bitmap and builds a + # monochrome palette. Otherwise the function first converts the + # bitmap to a 8-bit greyscale bitmap. + # + # 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 dither(algorithm, &block) + ptr = FreeImage.FreeImage_Dither(self, algorithm) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + + # :call-seq: + # image.threshold(value) -> bitmap + # image.threshold(value) {|img| block} -> bitmap + # + # Converts a bitmap to 1-bit monochrome bitmap using a threshold value + # between 0 and 255. The function first converts the bitmap to a 8-bit + # greyscale bitmap. Then any brightness level that is less than the + # threshold is set to zero and any value above is set to 1. + # For 1-bit input bitmaps, the function clones the input bitmap and + # builds a monochrome palette. + # + # 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 threshold(value, &block) + value = Integer(value) + unless (0..255).include?(value) + raise(RangeError, "Value is out of range 0..255. Value: #{value}") + end + ptr = FreeImage.FreeImage_Threshold(self, value) + FreeImage.check_last_error + self.class.new(ptr, &block) + end + end end \ No newline at end of file