carray-rmagick 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dfffcd1dc6cdda77cc5a3089c45ca836268f45ca
4
+ data.tar.gz: e9a804e2d79801be3c96eb04b014f90b480bc9d3
5
+ SHA512:
6
+ metadata.gz: 8c557df77610e1616e9faf53457dec1c5421ff42fb9756d2ef52c0ff0098516837a01dc2ba7d12962810cea29e655dc354ba86ab7c22e67dac5c848388f22349
7
+ data.tar.gz: 8d5031a7552de0eacaa1d2d5f84b508af3a34c7f1c697c66e527f4bc95d1b1ca6a400f7cdde6be77c482e3bdc34db1059f14928b770c73ecf35b0e4966588899
@@ -0,0 +1,14 @@
1
+ carray-rmagick
2
+ ==============
3
+
4
+ Extension For Converting Magick::Image To/From CArray.
5
+
6
+ Author
7
+ ------
8
+
9
+ Hiroki Motoyoshi
10
+
11
+
12
+
13
+
14
+
@@ -0,0 +1,23 @@
1
+
2
+ Gem::Specification::new do |s|
3
+ version = "1.0.0"
4
+
5
+ files = Dir.glob("**/*") - [
6
+ Dir.glob("carray*.gem"),
7
+ ].flatten
8
+
9
+ s.platform = Gem::Platform::RUBY
10
+ s.name = "carray-rmagick"
11
+ s.summary = "Extension for converting Magick::Image to/from CArray"
12
+ s.description = <<-HERE
13
+ Extension for converting Magick::Image to/from CArray
14
+ HERE
15
+ s.version = version
16
+ s.author = "Hiroki Motoyoshi"
17
+ s.email = ""
18
+ s.homepage = 'https://github.com/himotoyoshi/carray_rmagick'
19
+ s.files = files
20
+ s.extensions = [ "extconf.rb" ]
21
+ s.has_rdoc = false
22
+ s.required_ruby_version = ">= 1.8.1"
23
+ end
@@ -0,0 +1,353 @@
1
+ /* ---------------------------------------------------------------------------
2
+
3
+ carray/rmagick/carray_rmagick.c
4
+
5
+ This file is part of Ruby/CArray extension library.
6
+ You can redistribute it and/or modify it under the terms of
7
+ the Ruby Licence.
8
+
9
+ Copyright (C) 2005-2008 Hiroki Motoyoshi
10
+
11
+ ---------------------------------------------------------------------------- */
12
+
13
+ #include "magick/api.h"
14
+
15
+ #undef PACKAGE_VERSION
16
+ #undef PACKAGE_NAME
17
+ #undef PACKAGE_STRING
18
+ #undef PACKAGE_BUGREPORT
19
+ #undef PACKAGE_TARNAME
20
+
21
+ #include "carray.h"
22
+
23
+ static VALUE
24
+ Image_fetch_index (VALUE self, VALUE vidx)
25
+ {
26
+ volatile VALUE out;
27
+ Image *image;
28
+ PixelPacket *pixel;
29
+ int32_t irow, icol, imem;
30
+
31
+ Data_Get_Struct(self, Image, image);
32
+
33
+ Check_Type(vidx, T_ARRAY);
34
+ irow = NUM2INT(rb_ary_entry(vidx, 0));
35
+ icol = NUM2INT(rb_ary_entry(vidx, 1));
36
+ imem = NUM2INT(rb_ary_entry(vidx, 2));
37
+
38
+ pixel = (PixelPacket *) GetVirtualPixels(image,
39
+ icol, irow, 1, 1, &image->exception);
40
+
41
+ switch ( imem ) {
42
+ case 0: out = ULONG2NUM(pixel->red); break;
43
+ case 1: out = ULONG2NUM(pixel->green); break;
44
+ case 2: out = ULONG2NUM(pixel->blue); break;
45
+ case 3: out = ULONG2NUM(pixel->opacity); break;
46
+ }
47
+
48
+ return out;
49
+ }
50
+
51
+ static VALUE
52
+ Image_store_index (VALUE self, VALUE vidx, VALUE vval)
53
+ {
54
+ Image *image;
55
+ PixelPacket *pixel;
56
+ int32_t irow, icol, imem;
57
+
58
+ Data_Get_Struct(self, Image, image);
59
+
60
+ Check_Type(vidx, T_ARRAY);
61
+ irow = NUM2INT(rb_ary_entry(vidx, 0));
62
+ icol = NUM2INT(rb_ary_entry(vidx, 1));
63
+ imem = NUM2INT(rb_ary_entry(vidx, 2));
64
+
65
+ pixel = (PixelPacket *) GetVirtualPixels(image,
66
+ icol, irow, 1, 1, &image->exception);
67
+
68
+ switch ( imem ) {
69
+ case 0: pixel->red = NUM2ULONG(vval); break;
70
+ case 1: pixel->green = NUM2ULONG(vval); break;
71
+ case 2: pixel->blue = NUM2ULONG(vval); break;
72
+ case 3: pixel->opacity = NUM2ULONG(vval); break;
73
+ }
74
+
75
+ SyncAuthenticPixels(image, &image->exception);
76
+
77
+ return vval;
78
+ }
79
+
80
+
81
+ static VALUE
82
+ Image_copy_data_to_ca (VALUE self, VALUE vca)
83
+ {
84
+ Image *image;
85
+ PixelPacket *pixels;
86
+ long columns, rows;
87
+ long size, n;
88
+ CArray *ca;
89
+ int32_t dim[3];
90
+
91
+ Data_Get_Struct(self, Image, image);
92
+ columns = image->columns;
93
+ rows = image->rows;
94
+ size = columns * rows;
95
+ dim[0] = rows;
96
+ dim[1] = columns;
97
+ dim[2] = 4;
98
+
99
+ rb_check_carray_object(vca);
100
+ Data_Get_Struct(vca, CArray, ca);
101
+ ca_check_shape(ca, 3, dim);
102
+
103
+ switch ( sizeof(Quantum) ) {
104
+ case 1:
105
+ ca_check_data_type(ca, CA_UINT8);
106
+ break;
107
+ case 2:
108
+ ca_check_data_type(ca, CA_UINT16);
109
+ break;
110
+ case 4:
111
+ ca_check_data_type(ca, CA_UINT32);
112
+ break;
113
+ default:
114
+ rb_raise(rb_eRuntimeError, "invalid data_type of given carray");
115
+ }
116
+
117
+ SetImageType(image, TrueColorType);
118
+
119
+ pixels = (PixelPacket *) GetVirtualPixels(image,
120
+ 0, 0, columns, rows, &image->exception);
121
+
122
+ if ( ! pixels ) {
123
+ rb_raise(rb_eRuntimeError, "failed to get image pixels");
124
+ }
125
+
126
+ ca_attach(ca);
127
+
128
+ switch ( sizeof(Quantum) ) {
129
+ case 1: {
130
+ PixelPacket *p;
131
+ u_int8_t *q;
132
+ p = pixels;
133
+ q = (u_int8_t *)ca->ptr;
134
+ for (n=0; n<size; n++) {
135
+ *q++ = p->red;
136
+ *q++ = p->green;
137
+ *q++ = p->blue;
138
+ *q++ = p->opacity;
139
+ p++;
140
+ }
141
+ break;
142
+ }
143
+ case 2: {
144
+ PixelPacket *p;
145
+ u_int16_t *q;
146
+ p = pixels;
147
+ q = (u_int16_t *)ca->ptr;
148
+ for (n=0; n<size; n++) {
149
+ *q++ = p->red;
150
+ *q++ = p->green;
151
+ *q++ = p->blue;
152
+ *q++ = p->opacity;
153
+ p++;
154
+ }
155
+ break;
156
+ }
157
+ case 4: {
158
+ PixelPacket *p;
159
+ u_int32_t *q;
160
+ p = pixels;
161
+ q = (u_int32_t *)ca->ptr;
162
+ for (n=0; n<size; n++) {
163
+ *q++ = p->red;
164
+ *q++ = p->green;
165
+ *q++ = p->blue;
166
+ *q++ = p->opacity;
167
+ p++;
168
+ }
169
+ break;
170
+ }
171
+ }
172
+
173
+ ca_sync(ca);
174
+ ca_detach(ca);
175
+
176
+ return vca;
177
+ }
178
+
179
+ static VALUE
180
+ Image_sync_data_from_ca (VALUE self, VALUE vca)
181
+ {
182
+ Image *image;
183
+ PixelPacket *pixels;
184
+ long columns, rows;
185
+ long size, n;
186
+ int okay;
187
+ CArray *ca;
188
+ int32_t dim[3];
189
+
190
+ Data_Get_Struct(self, Image, image);
191
+ columns = image->columns;
192
+ rows = image->rows;
193
+ size = columns * rows;
194
+ dim[0] = rows;
195
+ dim[1] = columns;
196
+ dim[2] = 4;
197
+
198
+ rb_check_carray_object(vca);
199
+ Data_Get_Struct(vca, CArray, ca);
200
+ ca_check_shape(ca, 3, dim);
201
+
202
+ switch ( sizeof(Quantum) ) {
203
+ case 1:
204
+ ca_check_data_type(ca, CA_UINT8);
205
+ break;
206
+ case 2:
207
+ ca_check_data_type(ca, CA_UINT16);
208
+ break;
209
+ case 4:
210
+ ca_check_data_type(ca, CA_UINT32);
211
+ break;
212
+ default:
213
+ rb_raise(rb_eRuntimeError, "invalid data_type of given carray");
214
+ }
215
+
216
+ SetImageType(image, TrueColorType);
217
+
218
+ pixels = (PixelPacket *) GetVirtualPixels(image,
219
+ 0, 0, columns, rows, &image->exception);
220
+
221
+ if ( pixels ) {
222
+ PixelPacket *p = pixels;
223
+ ca_attach(ca);
224
+ switch ( sizeof(Quantum) ) {
225
+ case 1: {
226
+ u_int8_t *q = (u_int8_t *) ca->ptr;
227
+ for (n=0; n<size; n++) {
228
+ p->red = *q++;
229
+ p->green = *q++;
230
+ p->blue = *q++;
231
+ p->opacity = *q++;
232
+ p++;
233
+ }
234
+ break;
235
+ }
236
+ case 2: {
237
+ u_int16_t *q = (u_int16_t *) ca->ptr;
238
+ for (n=0; n<size; n++) {
239
+ p->red = *q++;
240
+ p->green = *q++;
241
+ p->blue = *q++;
242
+ p->opacity = *q++;
243
+ p++;
244
+ }
245
+ break;
246
+ }
247
+ case 4: {
248
+ u_int32_t *q = (u_int32_t *) ca->ptr;
249
+ for (n=0; n<size; n++) {
250
+ p->red = *q++;
251
+ p->green = *q++;
252
+ p->blue = *q++;
253
+ p->opacity = *q++;
254
+ p++;
255
+ }
256
+ break;
257
+ }
258
+ }
259
+
260
+ ca_detach(ca);
261
+
262
+ okay = SyncAuthenticPixels(image, &image->exception);
263
+
264
+ if ( ! okay ) {
265
+ rb_raise(rb_eRuntimeError, "image pixels could not be synced");
266
+ }
267
+
268
+ }
269
+
270
+ return self;
271
+ }
272
+
273
+
274
+ static VALUE
275
+ Image_fill_data (VALUE self, VALUE vval)
276
+ {
277
+ Image *image;
278
+ PixelPacket *pixels;
279
+ unsigned long val;
280
+ long columns, rows;
281
+ long size, n;
282
+ int okay;
283
+
284
+ Data_Get_Struct(self, Image, image);
285
+ columns = image->columns;
286
+ rows = image->rows;
287
+ size = columns * rows;
288
+
289
+ val = NUM2ULONG(vval);
290
+
291
+ SetImageType(image, TrueColorType);
292
+
293
+ pixels = (PixelPacket *) GetAuthenticPixels(image, 0, 0, columns, rows, &image->exception);
294
+
295
+ if ( pixels ) {
296
+ PixelPacket *p = pixels;
297
+ switch ( sizeof(Quantum) ) {
298
+ case 1: {
299
+ for (n=0; n<size; n++) {
300
+ p->red = val;
301
+ p->green = val;
302
+ p->blue = val;
303
+ p->opacity = val;
304
+ p++;
305
+ }
306
+ break;
307
+ }
308
+ case 2: {
309
+ for (n=0; n<size; n++) {
310
+ p->red = val;
311
+ p->green = val;
312
+ p->blue = val;
313
+ p->opacity = val;
314
+ p++;
315
+ }
316
+ break;
317
+ }
318
+ case 4: {
319
+ for (n=0; n<size; n++) {
320
+ p->red = val;
321
+ p->green = val;
322
+ p->blue = val;
323
+ p->opacity = val;
324
+ p++;
325
+ }
326
+ break;
327
+ }
328
+ }
329
+
330
+ okay = SyncAuthenticPixels(image, &image->exception);
331
+
332
+ if ( ! okay ) {
333
+ rb_raise(rb_eRuntimeError, "image pixels could not be synced");
334
+ }
335
+
336
+ }
337
+
338
+ return self;
339
+ }
340
+
341
+ void
342
+ Init_carray_rmagick ()
343
+ {
344
+ VALUE mMagick = rb_const_get(rb_cObject, rb_intern("Magick"));
345
+ VALUE cImage = rb_const_get(mMagick, rb_intern("Image"));
346
+
347
+ rb_define_method(cImage, "_fetch_index", Image_fetch_index, 1);
348
+ rb_define_method(cImage, "_store_index", Image_store_index, 2);
349
+ rb_define_method(cImage, "_copy_data_to_ca", Image_copy_data_to_ca, 1);
350
+ rb_define_method(cImage, "_sync_data_from_ca", Image_sync_data_from_ca, 1);
351
+ rb_define_method(cImage, "_fill_data", Image_fill_data, 1);
352
+ }
353
+
@@ -0,0 +1,37 @@
1
+ require 'mkmf'
2
+ require 'carray/mkmf'
3
+
4
+ begin
5
+ have_image_magick = true
6
+ $CPPFLAGS << " " << `Magick-config --cflags --cppflags`.split("\n").join(" ")
7
+ `Magick-config --libs`.chomp.split(/\s+/).uniq.each do |opt|
8
+ case opt
9
+ when /\-L(.*)/
10
+ $LDFLAGS << " " << opt
11
+ end
12
+ end
13
+ `Magick-config --libs`.chomp.split(/\s+/).uniq.each do |opt|
14
+ case opt
15
+ when /\-l(.*)/
16
+ unless have_library($1)
17
+ have_image_magick = false
18
+ break
19
+ end
20
+ end
21
+ end
22
+ rescue
23
+ end
24
+
25
+ if have_carray()
26
+ if have_header("magick/api.h") and have_image_magick
27
+ create_makefile("carray/carray_rmagick")
28
+ else
29
+ open("Makefile", "w") { |io|
30
+ io << "all:" << "\n"
31
+ io << "install:" << "\n"
32
+ io << "clean:" << "\n"
33
+ io << "distclean:" << "\n"
34
+ io << "\trm -rf mkmf.log Makefile" << "\n"
35
+ }
36
+ end
37
+ end
@@ -0,0 +1,17 @@
1
+ module Magick
2
+ class Image
3
+ rmagick_rb = "carray/io/rmagick"
4
+ autoload_method "export_pixels_to_ca", rmagick_rb
5
+ autoload_method "import_pixels_from_ca", rmagick_rb
6
+ end
7
+ end
8
+
9
+ class CArray
10
+ rmagick_rb = "carray/io/rmagick"
11
+ autoload_method "self.load_image", rmagick_rb
12
+ autoload_method "save_image", rmagick_rb
13
+ autoload_method "display_image", rmagick_rb
14
+ autoload_method "to_image", rmagick_rb
15
+ end
16
+
17
+
@@ -0,0 +1,9 @@
1
+ autoload :CAMagickImage, "carray/object/ca_obj_magick_image"
2
+
3
+ module Magick
4
+ class Image
5
+ magick_image_rb = "carray/object/ca_obj_magick_image"
6
+ autoload_method "ca", magick_image_rb
7
+ autoload_method "to_ca", magick_image_rb
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ require "carray"
2
+ require "rmagick"
3
+ require "carray/carray_rmagick"
4
+ require "carray/io/rmagick"
5
+ require "carray/object/ca_obj_magick_image"
@@ -0,0 +1,147 @@
1
+ # ----------------------------------------------------------------------------
2
+ #
3
+ # carray/io/rmagick.rb
4
+ #
5
+ # This file is part of Ruby/CArray extension library.
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Ruby Licence.
8
+ #
9
+ # Copyright (C) 2005-2008 Hiroki Motoyoshi
10
+ #
11
+ # ----------------------------------------------------------------------------
12
+
13
+ require "RMagick"
14
+ require "carray/carray_rmagick"
15
+
16
+ class Magick::Image
17
+
18
+ def export_pixels_to_ca (ca, map="RGB",x=0,y=0)
19
+ case ca.data_type
20
+ when CA_FIXLEN
21
+ case ca.bytes
22
+ when map.size
23
+ stype = Magick::CharPixel
24
+ when 2*map.size
25
+ stype = Magick::ShortPixel
26
+ when 4*map.size
27
+ stype = Magick::IntegerPixel
28
+ else
29
+ raise
30
+ end
31
+ when CA_UINT8, CA_INT8
32
+ stype = Magick::CharPixel
33
+ when CA_UINT16, CA_INT16
34
+ stype = Magick::ShortPixel
35
+ when CA_UINT32, CA_INT32
36
+ stype = Magick::IntegerPixel
37
+ when CA_FLOAT32
38
+ stype = Magick::FloatPixel
39
+ when CA_FLOAT64
40
+ stype = Magick::DoublePixel
41
+ else
42
+ raise "invalid strage type"
43
+ end
44
+ case ca.rank
45
+ when 2
46
+ if map.size != 1
47
+ raise
48
+ end
49
+ when 3
50
+ if map.size != ca.dim.last
51
+ raise
52
+ end
53
+ else
54
+ raise "invalid rank"
55
+ end
56
+ ca.load_binary(export_pixels_to_str(x,y,ca.dim1,ca.dim0,map,stype))
57
+ return ca
58
+ end
59
+
60
+ def import_pixels_from_ca (ca,map="RGBO",x=0,y=0)
61
+ case ca.data_type
62
+ when CA_FIXLEN
63
+ case ca.bytes
64
+ when map.size
65
+ stype = Magick::CharPixel
66
+ when 2*map.size
67
+ stype = Magick::ShortPixel
68
+ when 4*map.size
69
+ stype = Magick::IntegerPixel
70
+ else
71
+ raise
72
+ end
73
+ when CA_UINT8, CA_INT8
74
+ stype = Magick::CharPixel
75
+ when CA_UINT16, CA_INT16
76
+ stype = Magick::ShortPixel
77
+ when CA_UINT32, CA_INT32
78
+ stype = Magick::IntegerPixel
79
+ when CA_FLOAT32
80
+ stype = Magick::FloatPixel
81
+ when CA_FLOAT64
82
+ stype = Magick::DoublePixel
83
+ else
84
+ raise "invalid strage type"
85
+ end
86
+ import_pixels(x,y,ca.dim1,ca.dim0,map,ca.dump_binary,stype)
87
+ return self
88
+ end
89
+
90
+ end
91
+
92
+ class CArray
93
+
94
+ def self.load_image (file, map="RGBO", data_type = nil)
95
+ img = Magick::Image.read(file).first
96
+ rows, cols = img.rows, img.columns
97
+ unless data_type
98
+ case img.quantum_depth
99
+ when 8
100
+ data_type = CA_UINT8
101
+ when 16
102
+ data_type = CA_UINT16
103
+ when 32
104
+ data_type = CA_UINT32
105
+ end
106
+ end
107
+ case map.size
108
+ when 1
109
+ out = CArray.new(data_type, [rows, cols])
110
+ else
111
+ out = CArray.new(data_type, [rows, cols, map.size])
112
+ end
113
+ img.export_pixels_to_ca(out, map)
114
+ return out
115
+ end
116
+
117
+ def to_image (map="RGBO", ch=nil)
118
+ img = Magick::Image.new(dim1, dim0)
119
+ case data_type
120
+ when CA_FIXLEN
121
+ img.import_pixels_from_ca(self, map)
122
+ else
123
+ case rank
124
+ when 2
125
+ map = "I"
126
+ ca = self[:%, :%, 1]
127
+ when 3
128
+ unless ch
129
+ ch = Array.new(map.size){|i| i}
130
+ end
131
+ ca = self[nil,nil,CA_INT(ch)]
132
+ end
133
+ img.import_pixels_from_ca(ca, map)
134
+ end
135
+ return img
136
+ end
137
+
138
+ def save_image (file, map="RGBO", ch=nil)
139
+ to_image(map, ch).write(file)
140
+ return nil
141
+ end
142
+
143
+ def display_image (map="RGBO", ch=nil)
144
+ to_image(map, ch).display
145
+ end
146
+ end
147
+
@@ -0,0 +1,84 @@
1
+ # ----------------------------------------------------------------------------
2
+ #
3
+ # carray/object/ca_obj_magick_image.rb
4
+ #
5
+ # This file is part of Ruby/CArray extension library.
6
+ # You can redistribute it and/or modify it under the terms of
7
+ # the Ruby Licence.
8
+ #
9
+ # Copyright (C) 2005-2008 Hiroki Motoyoshi
10
+ #
11
+ # ----------------------------------------------------------------------------
12
+
13
+ require "RMagick"
14
+ require "carray/carray_rmagick"
15
+
16
+ class CAMagickImage < CAObject
17
+
18
+ DEPTH_TO_TYPE = {
19
+ 8 => CA_UINT8,
20
+ 16 => CA_UINT16,
21
+ 32 => CA_UINT32
22
+ }
23
+
24
+ def initialize (image)
25
+ @image = image
26
+ if Magick.const_defined?(:QuantumDepth)
27
+ magick_quantum_depth = Magick::QuantumDepth
28
+ else
29
+ magick_quantum_depth = Magick::MAGICKCORE_QUANTUM_DEPTH
30
+ end
31
+ @qtype = DEPTH_TO_TYPE[magick_quantum_depth]
32
+ type = DEPTH_TO_TYPE[@image.quantum_depth]
33
+ @scale = 0
34
+ (magick_quantum_depth / @image.quantum_depth).times do |i|
35
+ @scale += 1 << @image.quantum_depth * i
36
+ end
37
+ super(type, [@image.rows, @image.columns, 4])
38
+ end
39
+
40
+ def fetch_index (idx)
41
+ return @image._fetch_index(idx)/@scale
42
+ end
43
+
44
+ def store_index (idx, val)
45
+ return @image._store_index(idx, val*@scale)
46
+ end
47
+
48
+ def copy_data (data)
49
+ qdata = CArray.wrap_writable(data, @qtype)
50
+ qdata.attach! {
51
+ @image._copy_data_to_ca(qdata)
52
+ if @scale != 1
53
+ qdata.div!(@scale)
54
+ end
55
+ }
56
+ end
57
+
58
+ def sync_data (data)
59
+ qdata = CArray.wrap_readonly(data, @qtype)
60
+ qdata.attach {
61
+ if @scale != 1
62
+ qdata.mul!(@scale)
63
+ end
64
+ @image._sync_data_from_ca(qdata)
65
+ }
66
+ end
67
+
68
+ def fill_data (val)
69
+ return @image._fill_data(val*@scale)
70
+ end
71
+
72
+ end
73
+
74
+ class Magick::Image
75
+
76
+ def ca
77
+ return CAMagickImage.new(self)
78
+ end
79
+
80
+ def to_ca
81
+ return ca.to_ca
82
+ end
83
+
84
+ end
metadata ADDED
@@ -0,0 +1,54 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: carray-rmagick
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Hiroki Motoyoshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-05-06 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ Extension for converting Magick::Image to/from CArray
15
+ email: ''
16
+ executables: []
17
+ extensions:
18
+ - extconf.rb
19
+ extra_rdoc_files: []
20
+ files:
21
+ - README.md
22
+ - carray-rmagick.gemspec
23
+ - carray_rmagick.c
24
+ - extconf.rb
25
+ - lib/autoload/autoload_io_rmagick.rb
26
+ - lib/autoload/autoload_object_magick_image.rb
27
+ - lib/carray-rmagick.rb
28
+ - lib/io/rmagick.rb
29
+ - lib/object/ca_obj_magick_image.rb
30
+ homepage: https://github.com/himotoyoshi/carray_rmagick
31
+ licenses: []
32
+ metadata: {}
33
+ post_install_message:
34
+ rdoc_options: []
35
+ require_paths:
36
+ - lib
37
+ required_ruby_version: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: 1.8.1
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ requirements: []
48
+ rubyforge_project:
49
+ rubygems_version: 2.6.4
50
+ signing_key:
51
+ specification_version: 4
52
+ summary: Extension for converting Magick::Image to/from CArray
53
+ test_files: []
54
+ has_rdoc: false