lib/free-image/modules/pixels.rb in free-image-0.6.2 vs lib/free-image/modules/pixels.rb in free-image-0.7.0
- old
+ new
@@ -1,135 +1,135 @@
-module FreeImage
- #DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib);
- attach_function('FreeImage_GetBits', [:pointer], :pointer)
-
- #DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline);
- attach_function('FreeImage_GetScanLine', [:pointer, :int], :pointer)
-
- #DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
- attach_function('FreeImage_GetPixelIndex', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
-
- #DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
- attach_function('FreeImage_SetPixelIndex', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
-
- #DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
- attach_function('FreeImage_GetPixelColor', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
-
- #DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
- attach_function('FreeImage_SetPixelColor', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
-
- # == Summary
- #
- # The \Pixel module provides methods that allow you to read, write and work pixel-by-pixel
- # with image data. \FreeImage not only can work with standard bitmap data
- # (e.g. 1-, 4-, 8-, 16-, 24- and 32-bit) but also with scientific data such as
- # 16-bit greyscale images, or images made up of long, double or complex values
- # (often used in signal and image processing algorithms).
- #
- # The \FreeImage coordinate system is upside down relative to usual graphics
- # conventions. Thus, the scanlines are stored upside down, with the first
- # scan in memory being the bottommost scan in the image.
- #
- # For additional information, please refer to the FreeImage::Scanline documentation.
- #
- module Pixels
- # Returns the data-bits of the bitmap. It is up to you to interpret these bytes
- # correctly, according to the results of Information#bits_per_pixel, Information#red_mask,
- # Information#green_mask and Information#blue_mask.
- #
- # If the bitmap does not contain pixel data (see Information#has_pixels),
- # nil will be returned.
- #
- # For a performance reason, the address returned by FreeImage_GetBits is aligned on
- # a 16 bytes alignment boundary
- #
- def bits
- ptr = FreeImage.FreeImage_GetBits(self)
- FreeImage.check_last_error
- ptr.read_string
- end
-
- # Returns the requested row of image data as a FreeImage::Scanline instance.
- #
- # If the bitmap does not contain pixel data (see Information#has_pixels),
- # nil will be returned.
- def scanline(index)
- unless (0...self.height).include?(index)
- raise(RangeError, "Index must be between 0 and #{self.height - 1}")
- end
- ptr = FreeImage.FreeImage_GetScanLine(self, index)
- FreeImage.check_last_error
-
- ptr ? Scanline.new(self, index, ptr) : nil
- end
-
- # Gets the pixel index of a palettized image at the specified coordinate.
- #
- # == Parameters
- # x:: The pixel position in horizontal direction
- # y:: The pixel position in vertical direction.
- #
- def pixel_index(x, y)
- byte_type = FreeImage.find_type(:byte)
- ptr = FFI::MemoryPointer.new(byte_type)
- result = FreeImage.FreeImage_GetPixelIndex(self, x, y, ptr)
- FreeImage.check_last_error
- return nil unless result
-
- data = ptr.read_bytes(byte_type.size)
- if byte_type.size == 1
- data.ord
- else
- data
- end
- end
-
- # Sets the pixel index of a palettized image at the specified coordinate.
- #
- # == Parameters
- # x:: The pixel position in horizontal direction
- # y:: The pixel position in vertical direction.
- #
- # The function returns true on success and false otherwise.
- #
- def set_pixel_index(x, y, index)
- byte_type = FreeImage.find_type(:byte)
- ptr = FFI::MemoryPointer.new(byte_type.size)
- if byte_type.size == 1
- ptr.put_bytes(0, index.chr, 0, byte_type.size)
- else
- ptr.put_bytes(0, index.to_s, 0, byte_type.size)
- end
- result = FreeImage.FreeImage_SetPixelIndex(self, x, y, ptr)
- FreeImage.check_last_error
- result
- end
-
- # Gets the pixel color of a 16-, 24- or 32-bit image at the specified coordinate.
- #
- # == Parameters
- # x:: The pixel position in horizontal direction
- # y:: The pixel position in vertical direction.
- #
- def pixel_color(x, y)
- color = RGBQuad.new
- result = FreeImage.FreeImage_GetPixelColor(self, x, y, color)
- FreeImage.check_last_error
- result ? color : nil
- end
-
- # Sets the pixel color of a 16-, 24- or 32-bit image at the specified coordinate.
- #
- # == Parameters
- # x:: The pixel position in horizontal direction
- # y:: The pixel position in vertical direction.
- # color:: The new color as a RGBAQuad instance.
- #
- # The function returns true on success and false otherwise.
- #
- def set_pixel_color(x, y, color)
- result = FreeImage.FreeImage_SetPixelColor(self, x, y, color)
- FreeImage.check_last_error
- result
- end
- end
+module FreeImage
+ #DLL_API BYTE *DLL_CALLCONV FreeImage_GetBits(FIBITMAP *dib);
+ attach_function('FreeImage_GetBits', [:pointer], :pointer)
+
+ #DLL_API BYTE *DLL_CALLCONV FreeImage_GetScanLine(FIBITMAP *dib, int scanline);
+ attach_function('FreeImage_GetScanLine', [:pointer, :int], :pointer)
+
+ #DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
+ attach_function('FreeImage_GetPixelIndex', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
+
+ #DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelIndex(FIBITMAP *dib, unsigned x, unsigned y, BYTE *value);
+ attach_function('FreeImage_SetPixelIndex', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
+
+ #DLL_API BOOL DLL_CALLCONV FreeImage_GetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
+ attach_function('FreeImage_GetPixelColor', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
+
+ #DLL_API BOOL DLL_CALLCONV FreeImage_SetPixelColor(FIBITMAP *dib, unsigned x, unsigned y, RGBQUAD *value);
+ attach_function('FreeImage_SetPixelColor', [:pointer, :uint, :uint, :pointer], FreeImage::Boolean)
+
+ # == Summary
+ #
+ # The \Pixel module provides methods that allow you to read, write and work pixel-by-pixel
+ # with image data. \FreeImage not only can work with standard bitmap data
+ # (e.g. 1-, 4-, 8-, 16-, 24- and 32-bit) but also with scientific data such as
+ # 16-bit greyscale images, or images made up of long, double or complex values
+ # (often used in signal and image processing algorithms).
+ #
+ # The \FreeImage coordinate system is upside down relative to usual graphics
+ # conventions. Thus, the scanlines are stored upside down, with the first
+ # scan in memory being the bottommost scan in the image.
+ #
+ # For additional information, please refer to the FreeImage::Scanline documentation.
+ #
+ module Pixels
+ # Returns the data-bits of the bitmap. It is up to you to interpret these bytes
+ # correctly, according to the results of Information#bits_per_pixel, Information#red_mask,
+ # Information#green_mask and Information#blue_mask.
+ #
+ # If the bitmap does not contain pixel data (see Information#has_pixels),
+ # nil will be returned.
+ #
+ # For a performance reason, the address returned by FreeImage_GetBits is aligned on
+ # a 16 bytes alignment boundary
+ #
+ def bits
+ ptr = FreeImage.FreeImage_GetBits(self)
+ FreeImage.check_last_error
+ ptr.read_string
+ end
+
+ # Returns the requested row of image data as a FreeImage::Scanline instance.
+ #
+ # If the bitmap does not contain pixel data (see Information#has_pixels),
+ # nil will be returned.
+ def scanline(index)
+ unless (0...self.height).include?(index)
+ raise(RangeError, "Index must be between 0 and #{self.height - 1}")
+ end
+ ptr = FreeImage.FreeImage_GetScanLine(self, index)
+ FreeImage.check_last_error
+
+ ptr ? Scanline.new(self, index, ptr) : nil
+ end
+
+ # Gets the pixel index of a palettized image at the specified coordinate.
+ #
+ # == Parameters
+ # x:: The pixel position in horizontal direction
+ # y:: The pixel position in vertical direction.
+ #
+ def pixel_index(x, y)
+ byte_type = FreeImage.find_type(:byte)
+ ptr = FFI::MemoryPointer.new(byte_type)
+ result = FreeImage.FreeImage_GetPixelIndex(self, x, y, ptr)
+ FreeImage.check_last_error
+ return nil unless result
+
+ data = ptr.read_bytes(byte_type.size)
+ if byte_type.size == 1
+ data.ord
+ else
+ data
+ end
+ end
+
+ # Sets the pixel index of a palettized image at the specified coordinate.
+ #
+ # == Parameters
+ # x:: The pixel position in horizontal direction
+ # y:: The pixel position in vertical direction.
+ #
+ # The function returns true on success and false otherwise.
+ #
+ def set_pixel_index(x, y, index)
+ byte_type = FreeImage.find_type(:byte)
+ ptr = FFI::MemoryPointer.new(byte_type.size)
+ if byte_type.size == 1
+ ptr.put_bytes(0, index.chr, 0, byte_type.size)
+ else
+ ptr.put_bytes(0, index.to_s, 0, byte_type.size)
+ end
+ result = FreeImage.FreeImage_SetPixelIndex(self, x, y, ptr)
+ FreeImage.check_last_error
+ result
+ end
+
+ # Gets the pixel color of a 16-, 24- or 32-bit image at the specified coordinate.
+ #
+ # == Parameters
+ # x:: The pixel position in horizontal direction
+ # y:: The pixel position in vertical direction.
+ #
+ def pixel_color(x, y)
+ color = RGBQuad.new
+ result = FreeImage.FreeImage_GetPixelColor(self, x, y, color)
+ FreeImage.check_last_error
+ result ? color : nil
+ end
+
+ # Sets the pixel color of a 16-, 24- or 32-bit image at the specified coordinate.
+ #
+ # == Parameters
+ # x:: The pixel position in horizontal direction
+ # y:: The pixel position in vertical direction.
+ # color:: The new color as a RGBAQuad instance.
+ #
+ # The function returns true on success and false otherwise.
+ #
+ def set_pixel_color(x, y, color)
+ result = FreeImage.FreeImage_SetPixelColor(self, x, y, color)
+ FreeImage.check_last_error
+ result
+ end
+ end
end
\ No newline at end of file