free-image 0.6.2 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/HISTORY +30 -19
- data/LICENSE +20 -20
- data/README.rdoc +120 -120
- data/Rakefile +51 -47
- data/cookbook.rdoc +248 -237
- data/free-image.gemspec +30 -29
- data/lib/free-image.rb +1 -2
- data/lib/free-image/bitmap.rb +2 -2
- data/lib/free-image/enums/filters.rb +11 -11
- data/lib/free-image/errors.rb +43 -43
- data/lib/free-image/modules/conversions.rb +253 -253
- data/lib/free-image/modules/helper.rb +41 -41
- data/lib/free-image/modules/information.rb +20 -2
- data/lib/free-image/modules/modify.rb +299 -299
- data/lib/free-image/modules/pixels.rb +134 -134
- data/lib/free-image/modules/transforms.rb +90 -90
- data/lib/free-image/sources/abstract_source.rb +178 -178
- data/lib/free-image/sources/file.rb +114 -114
- data/lib/free-image/sources/io.rb +153 -153
- data/lib/free-image/sources/memory.rb +188 -188
- data/lib/free-image/types/boolean.rb +13 -13
- data/lib/free-image/types/ffi.rb +13 -13
- data/lib/free-image/types/info_header.rb +36 -0
- data/lib/free-image/types/rgb16.rb +31 -0
- data/test/cookbook.rb +45 -46
- data/test/images/sample_composite.png +0 -0
- data/test/images/test16.bmp +0 -0
- data/test/images/test16bf555.bmp +0 -0
- data/test/images/test16bf565.bmp +0 -0
- data/test/test_bitmap.rb +61 -63
- data/test/test_conversions.rb +85 -86
- data/test/test_file.rb +68 -69
- data/test/test_free_image.rb +14 -15
- data/test/test_helper.rb +14 -0
- data/test/test_information.rb +145 -117
- data/test/test_io.rb +73 -74
- data/test/test_memory.rb +83 -84
- data/test/test_modify.rb +75 -58
- data/test/test_palette.rb +44 -45
- data/test/test_pixels.rb +61 -62
- data/test/test_rgb_quad.rb +24 -25
- data/test/test_scanline.rb +64 -65
- data/test/test_suite.rb +12 -17
- data/test/test_transforms.rb +28 -29
- metadata +58 -31
@@ -1,189 +1,189 @@
|
|
1
|
-
module FreeImage
|
2
|
-
typedef :pointer, :memory
|
3
|
-
|
4
|
-
#DLL_API void DLL_CALLCONV FreeImage_CloseMemory(FIMEMORY *stream);
|
5
|
-
attach_function('FreeImage_CloseMemory', [:memory], :void)
|
6
|
-
|
7
|
-
#DLL_API FIMEMORY *DLL_CALLCONV FreeImage_OpenMemory(BYTE *data FI_DEFAULT(0), DWORD size_in_bytes FI_DEFAULT(0));
|
8
|
-
attach_function('FreeImage_OpenMemory', [:pointer, :dword], :memory)
|
9
|
-
|
10
|
-
# DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0));
|
11
|
-
attach_function('FreeImage_GetFileTypeFromMemory', [:memory, :int], :format)
|
12
|
-
|
13
|
-
# DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0))
|
14
|
-
attach_function('FreeImage_LoadFromMemory', [:format, :memory, :int], :pointer)
|
15
|
-
|
16
|
-
# DLL_API BOOL DLL_CALLCONV FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags FI_DEFAULT(0));
|
17
|
-
attach_function('FreeImage_SaveToMemory', [:format, :pointer, :memory, :int], FreeImage::Boolean)
|
18
|
-
|
19
|
-
#DLL_API unsigned DLL_CALLCONV FreeImage_ReadMemory(void *buffer, unsigned size, unsigned count, FIMEMORY *stream);
|
20
|
-
attach_function('FreeImage_ReadMemory', [:pointer, :ulong, :ulong, :memory], :ulong)
|
21
|
-
|
22
|
-
# DLL_API long DLL_CALLCONV FreeImage_TellMemory(FIMEMORY *stream);
|
23
|
-
attach_function('FreeImage_TellMemory', [:memory], :long)
|
24
|
-
|
25
|
-
#DLL_API BOOL DLL_CALLCONV FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin);
|
26
|
-
attach_function('FreeImage_SeekMemory', [:memory, :long, :int], FreeImage::Boolean)
|
27
|
-
|
28
|
-
#DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes);
|
29
|
-
#DLL_API unsigned DLL_CALLCONV FreeImage_WriteMemory(const void *buffer, unsigned size, unsigned count, FIMEMORY *stream);
|
30
|
-
#DLL_API FIMULTIBITMAP *DLL_CALLCONV FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0));
|
31
|
-
#DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags);
|
32
|
-
|
33
|
-
# Wrapper for a FreeImage memory stream which allows images to be read and written
|
34
|
-
# to memory. Memory streams are usefule for storing images as blobs in a database
|
35
|
-
# or writing them to an to a Internet stream.
|
36
|
-
class MemoryStream < FFI::AutoPointer
|
37
|
-
def self.release(ptr)
|
38
|
-
FreeImage.FreeImage_CloseMemory(ptr)
|
39
|
-
FreeImage.check_last_error
|
40
|
-
end
|
41
|
-
|
42
|
-
# Create a new memory stream.
|
43
|
-
#
|
44
|
-
# == Parameters
|
45
|
-
# bytes:: If specified, a binary encoded Ruby string that stores image data. FreeImage
|
46
|
-
# will treat the string as read-only. If not specified, a writable MemoryStream
|
47
|
-
# is created.
|
48
|
-
def initialize(bytes = nil)
|
49
|
-
ptr = if bytes
|
50
|
-
buf = FFI::MemoryPointer.from_string(bytes)
|
51
|
-
FreeImage.FreeImage_OpenMemory(buf, bytes.bytesize)
|
52
|
-
else
|
53
|
-
FreeImage.FreeImage_OpenMemory(nil, 0)
|
54
|
-
end
|
55
|
-
FreeImage.check_last_error
|
56
|
-
|
57
|
-
super(ptr)
|
58
|
-
end
|
59
|
-
|
60
|
-
# Returns the size of the memory stream.
|
61
|
-
def count
|
62
|
-
# Store current position
|
63
|
-
pos = FreeImage.FreeImage_TellMemory(self)
|
64
|
-
FreeImage.check_last_error
|
65
|
-
|
66
|
-
# Go to end of stream to get length
|
67
|
-
FreeImage.FreeImage_SeekMemory(self, 0, ::IO::SEEK_END)
|
68
|
-
FreeImage.check_last_error
|
69
|
-
count = FreeImage.FreeImage_TellMemory(self)
|
70
|
-
|
71
|
-
# Restore position
|
72
|
-
FreeImage.FreeImage_SeekMemory(self, pos, ::IO::SEEK_SET)
|
73
|
-
FreeImage.check_last_error
|
74
|
-
|
75
|
-
count
|
76
|
-
end
|
77
|
-
|
78
|
-
# Returns the bytes of the memory stream.
|
79
|
-
def bytes
|
80
|
-
size = FFI::Type::CHAR.size
|
81
|
-
|
82
|
-
# Reset memory to start
|
83
|
-
FreeImage.FreeImage_SeekMemory(self, 0, ::IO::SEEK_SET)
|
84
|
-
FreeImage.check_last_error
|
85
|
-
|
86
|
-
buffer = FFI::MemoryPointer.new(FFI::Type::CHAR, size * count)
|
87
|
-
FreeImage.check_last_error
|
88
|
-
size = FreeImage.FreeImage_ReadMemory(buffer, size, count, self)
|
89
|
-
buffer.null? ? nil : buffer.read_string
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# == Summary
|
94
|
-
#
|
95
|
-
# Supports loading and saving images to a Ruby string.
|
96
|
-
#
|
97
|
-
# == Usage
|
98
|
-
#
|
99
|
-
# # Read an image from a byte string
|
100
|
-
# bytes = ::File.read('test/fixtures/lena.png', :encoding => Encoding::BINARY)
|
101
|
-
# image = FreeImage::Memory.open(bytes)
|
102
|
-
#
|
103
|
-
# # Save an image to a byte string
|
104
|
-
# dest = FreeImage::Memory.new
|
105
|
-
# image.save(dest, :jpeg)
|
106
|
-
# dest.bytes
|
107
|
-
#
|
108
|
-
class Memory < AbstractSource
|
109
|
-
##
|
110
|
-
# MemoryStream used to read and write data
|
111
|
-
attr_reader :memory
|
112
|
-
|
113
|
-
##
|
114
|
-
# :call-seq:
|
115
|
-
# file.open(format = nil, flags = 0) -> FreeImage::Bitmap
|
116
|
-
#
|
117
|
-
# Opens an image from a file.
|
118
|
-
#
|
119
|
-
# == Parameters
|
120
|
-
# format:: By default FreeImage will automatically determine an image's format. However,
|
121
|
-
# you may override this value by using this parameter to specify a
|
122
|
-
# particular {format}[rdoc-ref:FreeImage.formats].
|
123
|
-
# flags:: Format specific flags that control how a bitmap is loaded. These flags are defined
|
124
|
-
# as constants on the AbstractSource::Decoder module. Flags can be combined using
|
125
|
-
# Ruby's bitwise or operator (|)
|
126
|
-
#
|
127
|
-
# == Usage
|
128
|
-
#
|
129
|
-
# source = File.new('<path_to_file>')
|
130
|
-
# source.open(:jpeg, AbtractSource::JPEG_QUALITYSUPERB | AbtractSource::JPEG_PROGRESSIVE)
|
131
|
-
#
|
132
|
-
|
133
|
-
# Create a new FreeImage::File instance that can read and write image data
|
134
|
-
# from memory.
|
135
|
-
#
|
136
|
-
# == Parameters
|
137
|
-
# bytes:: If specified, FreeImage will read image from the bytes string and treat
|
138
|
-
# it as readonly. If not specified, then FreeImage will create a writable
|
139
|
-
# memory stream.
|
140
|
-
#
|
141
|
-
def initialize(bytes = nil)
|
142
|
-
@memory = MemoryStream.new(bytes)
|
143
|
-
end
|
144
|
-
|
145
|
-
# call-seq:
|
146
|
-
# memory.format -> :format
|
147
|
-
#
|
148
|
-
# Returns the image format for a memory stream. If the image format cannot be determined
|
149
|
-
# the :unknown will be returned.
|
150
|
-
def format
|
151
|
-
result = FreeImage.FreeImage_GetFileTypeFromMemory(@memory, 0)
|
152
|
-
FreeImage.check_last_error
|
153
|
-
result
|
154
|
-
end
|
155
|
-
|
156
|
-
##
|
157
|
-
# :call-seq:
|
158
|
-
# memory.save(format = nil, flags = 0) -> boolean
|
159
|
-
#
|
160
|
-
# Saves an image to memory.
|
161
|
-
#
|
162
|
-
# == Parameters
|
163
|
-
# format:: The format[rdoc-ref:FreeImage.formats] to save the image to.
|
164
|
-
# flags::
|
165
|
-
#
|
166
|
-
#
|
167
|
-
#
|
168
|
-
# == Usage
|
169
|
-
#
|
170
|
-
# image = Bimap.open('<path_to_file>')
|
171
|
-
# dst = FreeImage::Memory.new
|
172
|
-
# dst.save(image, :jpeg, AbtractSource::JPEG_QUALITYSUPERB | AbtractSource::JPEG_PROGRESSIVE)
|
173
|
-
# dst.bytes
|
174
|
-
#
|
175
|
-
def save(bitmap, format, flags = 0)
|
176
|
-
result = FreeImage.FreeImage_SaveToMemory(format, bitmap, @memory, flags)
|
177
|
-
FreeImage.check_last_error
|
178
|
-
result
|
179
|
-
end
|
180
|
-
|
181
|
-
private
|
182
|
-
|
183
|
-
def load(format, flags)
|
184
|
-
ptr = FreeImage.FreeImage_LoadFromMemory(format, @memory, flags)
|
185
|
-
FreeImage.check_last_error
|
186
|
-
ptr
|
187
|
-
end
|
188
|
-
end
|
1
|
+
module FreeImage
|
2
|
+
typedef :pointer, :memory
|
3
|
+
|
4
|
+
#DLL_API void DLL_CALLCONV FreeImage_CloseMemory(FIMEMORY *stream);
|
5
|
+
attach_function('FreeImage_CloseMemory', [:memory], :void)
|
6
|
+
|
7
|
+
#DLL_API FIMEMORY *DLL_CALLCONV FreeImage_OpenMemory(BYTE *data FI_DEFAULT(0), DWORD size_in_bytes FI_DEFAULT(0));
|
8
|
+
attach_function('FreeImage_OpenMemory', [:pointer, :dword], :memory)
|
9
|
+
|
10
|
+
# DLL_API FREE_IMAGE_FORMAT DLL_CALLCONV FreeImage_GetFileTypeFromMemory(FIMEMORY *stream, int size FI_DEFAULT(0));
|
11
|
+
attach_function('FreeImage_GetFileTypeFromMemory', [:memory, :int], :format)
|
12
|
+
|
13
|
+
# DLL_API FIBITMAP *DLL_CALLCONV FreeImage_LoadFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0))
|
14
|
+
attach_function('FreeImage_LoadFromMemory', [:format, :memory, :int], :pointer)
|
15
|
+
|
16
|
+
# DLL_API BOOL DLL_CALLCONV FreeImage_SaveToMemory(FREE_IMAGE_FORMAT fif, FIBITMAP *dib, FIMEMORY *stream, int flags FI_DEFAULT(0));
|
17
|
+
attach_function('FreeImage_SaveToMemory', [:format, :pointer, :memory, :int], FreeImage::Boolean)
|
18
|
+
|
19
|
+
#DLL_API unsigned DLL_CALLCONV FreeImage_ReadMemory(void *buffer, unsigned size, unsigned count, FIMEMORY *stream);
|
20
|
+
attach_function('FreeImage_ReadMemory', [:pointer, :ulong, :ulong, :memory], :ulong)
|
21
|
+
|
22
|
+
# DLL_API long DLL_CALLCONV FreeImage_TellMemory(FIMEMORY *stream);
|
23
|
+
attach_function('FreeImage_TellMemory', [:memory], :long)
|
24
|
+
|
25
|
+
#DLL_API BOOL DLL_CALLCONV FreeImage_SeekMemory(FIMEMORY *stream, long offset, int origin);
|
26
|
+
attach_function('FreeImage_SeekMemory', [:memory, :long, :int], FreeImage::Boolean)
|
27
|
+
|
28
|
+
#DLL_API BOOL DLL_CALLCONV FreeImage_AcquireMemory(FIMEMORY *stream, BYTE **data, DWORD *size_in_bytes);
|
29
|
+
#DLL_API unsigned DLL_CALLCONV FreeImage_WriteMemory(const void *buffer, unsigned size, unsigned count, FIMEMORY *stream);
|
30
|
+
#DLL_API FIMULTIBITMAP *DLL_CALLCONV FreeImage_LoadMultiBitmapFromMemory(FREE_IMAGE_FORMAT fif, FIMEMORY *stream, int flags FI_DEFAULT(0));
|
31
|
+
#DLL_API BOOL DLL_CALLCONV FreeImage_SaveMultiBitmapToMemory(FREE_IMAGE_FORMAT fif, FIMULTIBITMAP *bitmap, FIMEMORY *stream, int flags);
|
32
|
+
|
33
|
+
# Wrapper for a FreeImage memory stream which allows images to be read and written
|
34
|
+
# to memory. Memory streams are usefule for storing images as blobs in a database
|
35
|
+
# or writing them to an to a Internet stream.
|
36
|
+
class MemoryStream < FFI::AutoPointer
|
37
|
+
def self.release(ptr)
|
38
|
+
FreeImage.FreeImage_CloseMemory(ptr)
|
39
|
+
FreeImage.check_last_error
|
40
|
+
end
|
41
|
+
|
42
|
+
# Create a new memory stream.
|
43
|
+
#
|
44
|
+
# == Parameters
|
45
|
+
# bytes:: If specified, a binary encoded Ruby string that stores image data. FreeImage
|
46
|
+
# will treat the string as read-only. If not specified, a writable MemoryStream
|
47
|
+
# is created.
|
48
|
+
def initialize(bytes = nil)
|
49
|
+
ptr = if bytes
|
50
|
+
buf = FFI::MemoryPointer.from_string(bytes)
|
51
|
+
FreeImage.FreeImage_OpenMemory(buf, bytes.bytesize)
|
52
|
+
else
|
53
|
+
FreeImage.FreeImage_OpenMemory(nil, 0)
|
54
|
+
end
|
55
|
+
FreeImage.check_last_error
|
56
|
+
|
57
|
+
super(ptr)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns the size of the memory stream.
|
61
|
+
def count
|
62
|
+
# Store current position
|
63
|
+
pos = FreeImage.FreeImage_TellMemory(self)
|
64
|
+
FreeImage.check_last_error
|
65
|
+
|
66
|
+
# Go to end of stream to get length
|
67
|
+
FreeImage.FreeImage_SeekMemory(self, 0, ::IO::SEEK_END)
|
68
|
+
FreeImage.check_last_error
|
69
|
+
count = FreeImage.FreeImage_TellMemory(self)
|
70
|
+
|
71
|
+
# Restore position
|
72
|
+
FreeImage.FreeImage_SeekMemory(self, pos, ::IO::SEEK_SET)
|
73
|
+
FreeImage.check_last_error
|
74
|
+
|
75
|
+
count
|
76
|
+
end
|
77
|
+
|
78
|
+
# Returns the bytes of the memory stream.
|
79
|
+
def bytes
|
80
|
+
size = FFI::Type::CHAR.size
|
81
|
+
|
82
|
+
# Reset memory to start
|
83
|
+
FreeImage.FreeImage_SeekMemory(self, 0, ::IO::SEEK_SET)
|
84
|
+
FreeImage.check_last_error
|
85
|
+
|
86
|
+
buffer = FFI::MemoryPointer.new(FFI::Type::CHAR, size * count)
|
87
|
+
FreeImage.check_last_error
|
88
|
+
size = FreeImage.FreeImage_ReadMemory(buffer, size, count, self)
|
89
|
+
buffer.null? ? nil : buffer.read_string
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# == Summary
|
94
|
+
#
|
95
|
+
# Supports loading and saving images to a Ruby string.
|
96
|
+
#
|
97
|
+
# == Usage
|
98
|
+
#
|
99
|
+
# # Read an image from a byte string
|
100
|
+
# bytes = ::File.read('test/fixtures/lena.png', :encoding => Encoding::BINARY)
|
101
|
+
# image = FreeImage::Memory.open(bytes)
|
102
|
+
#
|
103
|
+
# # Save an image to a byte string
|
104
|
+
# dest = FreeImage::Memory.new
|
105
|
+
# image.save(dest, :jpeg)
|
106
|
+
# dest.bytes
|
107
|
+
#
|
108
|
+
class Memory < AbstractSource
|
109
|
+
##
|
110
|
+
# MemoryStream used to read and write data
|
111
|
+
attr_reader :memory
|
112
|
+
|
113
|
+
##
|
114
|
+
# :call-seq:
|
115
|
+
# file.open(format = nil, flags = 0) -> FreeImage::Bitmap
|
116
|
+
#
|
117
|
+
# Opens an image from a file.
|
118
|
+
#
|
119
|
+
# == Parameters
|
120
|
+
# format:: By default FreeImage will automatically determine an image's format. However,
|
121
|
+
# you may override this value by using this parameter to specify a
|
122
|
+
# particular {format}[rdoc-ref:FreeImage.formats].
|
123
|
+
# flags:: Format specific flags that control how a bitmap is loaded. These flags are defined
|
124
|
+
# as constants on the AbstractSource::Decoder module. Flags can be combined using
|
125
|
+
# Ruby's bitwise or operator (|)
|
126
|
+
#
|
127
|
+
# == Usage
|
128
|
+
#
|
129
|
+
# source = File.new('<path_to_file>')
|
130
|
+
# source.open(:jpeg, AbtractSource::JPEG_QUALITYSUPERB | AbtractSource::JPEG_PROGRESSIVE)
|
131
|
+
#
|
132
|
+
|
133
|
+
# Create a new FreeImage::File instance that can read and write image data
|
134
|
+
# from memory.
|
135
|
+
#
|
136
|
+
# == Parameters
|
137
|
+
# bytes:: If specified, FreeImage will read image from the bytes string and treat
|
138
|
+
# it as readonly. If not specified, then FreeImage will create a writable
|
139
|
+
# memory stream.
|
140
|
+
#
|
141
|
+
def initialize(bytes = nil)
|
142
|
+
@memory = MemoryStream.new(bytes)
|
143
|
+
end
|
144
|
+
|
145
|
+
# call-seq:
|
146
|
+
# memory.format -> :format
|
147
|
+
#
|
148
|
+
# Returns the image format for a memory stream. If the image format cannot be determined
|
149
|
+
# the :unknown will be returned.
|
150
|
+
def format
|
151
|
+
result = FreeImage.FreeImage_GetFileTypeFromMemory(@memory, 0)
|
152
|
+
FreeImage.check_last_error
|
153
|
+
result
|
154
|
+
end
|
155
|
+
|
156
|
+
##
|
157
|
+
# :call-seq:
|
158
|
+
# memory.save(format = nil, flags = 0) -> boolean
|
159
|
+
#
|
160
|
+
# Saves an image to memory.
|
161
|
+
#
|
162
|
+
# == Parameters
|
163
|
+
# format:: The format[rdoc-ref:FreeImage.formats] to save the image to.
|
164
|
+
# flags:: Format specific flags that control how a bitmap is saved. These flags are defined
|
165
|
+
# as constants on the AbstractSource[rdoc-ref:FreeImage::AbstractSource::Encoder] class.
|
166
|
+
# Flags can be combined using Ruby's bitwise or operator (|)
|
167
|
+
#
|
168
|
+
# == Usage
|
169
|
+
#
|
170
|
+
# image = Bimap.open('<path_to_file>')
|
171
|
+
# dst = FreeImage::Memory.new
|
172
|
+
# dst.save(image, :jpeg, AbtractSource::JPEG_QUALITYSUPERB | AbtractSource::JPEG_PROGRESSIVE)
|
173
|
+
# dst.bytes
|
174
|
+
#
|
175
|
+
def save(bitmap, format, flags = 0)
|
176
|
+
result = FreeImage.FreeImage_SaveToMemory(format, bitmap, @memory, flags)
|
177
|
+
FreeImage.check_last_error
|
178
|
+
result
|
179
|
+
end
|
180
|
+
|
181
|
+
private
|
182
|
+
|
183
|
+
def load(format, flags)
|
184
|
+
ptr = FreeImage.FreeImage_LoadFromMemory(format, @memory, flags)
|
185
|
+
FreeImage.check_last_error
|
186
|
+
ptr
|
187
|
+
end
|
188
|
+
end
|
189
189
|
end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
module FreeImage
|
2
|
-
class Boolean
|
3
|
-
extend FFI::DataConverter
|
4
|
-
native_type :uint32
|
5
|
-
|
6
|
-
def self.to_native(val, ctx)
|
7
|
-
val == false ? 0 : 1
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.from_native(val, ctx)
|
11
|
-
val == 0 ? false : true
|
12
|
-
end
|
13
|
-
end
|
1
|
+
module FreeImage
|
2
|
+
class Boolean
|
3
|
+
extend FFI::DataConverter
|
4
|
+
native_type :uint32
|
5
|
+
|
6
|
+
def self.to_native(val, ctx)
|
7
|
+
val == false ? 0 : 1
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.from_native(val, ctx)
|
11
|
+
val == 0 ? false : true
|
12
|
+
end
|
13
|
+
end
|
14
14
|
end
|
data/lib/free-image/types/ffi.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
|
-
module FreeImage
|
2
|
-
if !self.msvc?
|
3
|
-
typedef :int32, :bool
|
4
|
-
typedef :
|
5
|
-
typedef :uint16, :word
|
6
|
-
typedef :uint32, :dword
|
7
|
-
typedef :int32, :long
|
8
|
-
else
|
9
|
-
typedef :long, :bool
|
10
|
-
typedef :uchar, :byte
|
11
|
-
typedef :ushort, :word
|
12
|
-
typedef :ulong, :dword
|
13
|
-
end
|
1
|
+
module FreeImage
|
2
|
+
if !self.msvc?
|
3
|
+
typedef :int32, :bool
|
4
|
+
typedef :uint8, :byte
|
5
|
+
typedef :uint16, :word
|
6
|
+
typedef :uint32, :dword
|
7
|
+
typedef :int32, :long
|
8
|
+
else
|
9
|
+
typedef :long, :bool
|
10
|
+
typedef :uchar, :byte
|
11
|
+
typedef :ushort, :word
|
12
|
+
typedef :ulong, :dword
|
13
|
+
end
|
14
14
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module FreeImage
|
4
|
+
# BI_RGB
|
5
|
+
RGB = 0
|
6
|
+
# BI_BITFIELDS
|
7
|
+
BITFIELDS = 3
|
8
|
+
# Structure for BITMAPINFOHEADER
|
9
|
+
=begin
|
10
|
+
DWORD biSize;
|
11
|
+
LONG biWidth;
|
12
|
+
LONG biHeight;
|
13
|
+
WORD biPlanes;
|
14
|
+
WORD biBitCount;
|
15
|
+
DWORD biCompression;
|
16
|
+
DWORD biSizeImage;
|
17
|
+
LONG biXPelsPerMeter;
|
18
|
+
LONG biYPelsPerMeter;
|
19
|
+
DWORD biClrUsed;
|
20
|
+
DWORD biClrImportant;
|
21
|
+
=end
|
22
|
+
class InfoHeader < FFI::Struct
|
23
|
+
layout :biSize, :dword, 0,
|
24
|
+
:biWidth, :long, 4,
|
25
|
+
:biHeight, :long, 8,
|
26
|
+
:biPlanes, :word, 12,
|
27
|
+
:biBitCount, :word, 14,
|
28
|
+
:biCompression, :dword, 16,
|
29
|
+
:biSizeImage, :dword, 20,
|
30
|
+
:biXPelsPerMeter, :long, 24,
|
31
|
+
:biYPelsPerMeter, :long, 28,
|
32
|
+
:biClrUsed, :dword, 32,
|
33
|
+
:biClrImportant, :dword, 36
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|