gmagick 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,346 @@
1
+ #include "gmagick.h"
2
+
3
+ void
4
+ gmi_free(GmImage *ptr)
5
+ {
6
+ if (ptr != (GmImage *)NULL) {
7
+ if (ptr->wand != (MagickWand *)NULL) {
8
+ DestroyMagickWand(ptr->wand);
9
+ }
10
+ ruby_xfree(ptr);
11
+ }
12
+ }
13
+
14
+ VALUE
15
+ gmi_alloc(VALUE klass) {
16
+ GmImage *ptr = ALLOC(GmImage);
17
+ ptr->wand = (MagickWand *)NULL;
18
+ return Data_Wrap_Struct(klass, 0, gmi_free, ptr);
19
+ }
20
+
21
+ /*
22
+ * Document-method: new
23
+ *
24
+ * call-seq:
25
+ * Gmagick::Image.new -> image
26
+ * Gmagick::Image.new(path) -> image
27
+ *
28
+ * Create a GraphicsMagick Object
29
+ *
30
+ * [+path+]
31
+ * image file path
32
+ *
33
+ * Examples:
34
+ *
35
+ * # Make image object
36
+ * Gmagick::Image.new
37
+ *
38
+ * # Make image object with path
39
+ * Gmagick::Image.new(path)
40
+ *
41
+ */
42
+ VALUE
43
+ gmi_initialize(int argc, VALUE *argv, VALUE self) {
44
+ if (argc > 1) {
45
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
46
+ }
47
+ volatile GmImage *gmImage;
48
+ Data_Get_Struct(self, GmImage, gmImage);
49
+ gmImage->wand = NewMagickWand();
50
+ if (argc > 0) {
51
+ gmi_read_image(self, argv[0]);
52
+ }
53
+ return Qnil;
54
+ }
55
+
56
+ VALUE
57
+ gmi_read_image(VALUE self, VALUE path_arg) {
58
+ MagickWand *wand = gmu_get_image_wand(self);
59
+ char *path = StringValuePtr(path_arg);
60
+ if (NULL == wand) {
61
+ puts("null");
62
+ }
63
+ MagickPassFail status = MagickReadImage(wand, path);
64
+ gum_check_image_exception(wand, status);
65
+ MagickSetImageFilename(wand, path);
66
+ return Qnil;
67
+ }
68
+
69
+ VALUE
70
+ gmi_write_image(int argc, VALUE *argv, VALUE self) {
71
+ if (argc > 1) {
72
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
73
+ }
74
+ MagickWand *wand = gmu_get_image_wand(self);
75
+ char* path;
76
+ if (argc > 0) {
77
+ path = StringValuePtr(argv[0]);
78
+ } else {
79
+ path = MagickGetImageFilename(wand);
80
+ if (NULL == path) {
81
+ rb_raise(rb_eRuntimeError, "filename never setted");
82
+ }
83
+ }
84
+ MagickPassFail status = MagickWriteImage(wand, path);
85
+ gum_check_image_exception(wand, status);
86
+ return Qnil;
87
+ }
88
+
89
+ VALUE
90
+ gmi_get_width(VALUE self) {
91
+ MagickWand *wand = gmu_get_image_wand(self);
92
+ return LONG2NUM(MagickGetImageWidth(wand));
93
+ }
94
+
95
+ VALUE
96
+ gmi_get_height(VALUE self) {
97
+ MagickWand *wand = gmu_get_image_wand(self);
98
+ return LONG2NUM(MagickGetImageHeight(wand));
99
+ }
100
+
101
+ VALUE
102
+ gmi_get_format(VALUE self) {
103
+ MagickWand *wand = gmu_get_image_wand(self);
104
+ return rb_str_new2(MagickGetImageFormat(wand));
105
+ }
106
+
107
+ VALUE
108
+ gmi_get_depth(VALUE self) {
109
+ MagickWand *wand = gmu_get_image_wand(self);
110
+ return LONG2NUM(MagickGetImageDepth(wand));
111
+ }
112
+
113
+ VALUE
114
+ gmi_get_colors(VALUE self) {
115
+ MagickWand *wand = gmu_get_image_wand(self);
116
+ return LONG2NUM(MagickGetImageColors(wand));
117
+ }
118
+
119
+ VALUE
120
+ gmi_get_resolution(VALUE self) {
121
+ MagickWand *wand = gmu_get_image_wand(self);
122
+ double x;
123
+ double y;
124
+ MagickPassFail status = MagickGetImageResolution(wand, &x, &y);
125
+ gum_check_image_exception(wand, status);
126
+ VALUE ary = rb_ary_new2(2);
127
+ rb_ary_push(ary, DBL2NUM(x));
128
+ rb_ary_push(ary, DBL2NUM(y));
129
+ return ary;
130
+ }
131
+
132
+ VALUE
133
+ gmi_get_number_images(VALUE self) {
134
+ MagickWand *wand = gmu_get_image_wand(self);
135
+ return LONG2NUM(MagickGetNumberImages(wand));
136
+ }
137
+
138
+ VALUE
139
+ gmi_read_image_blob(VALUE self, VALUE blob_arg) {
140
+ MagickWand *wand = gmu_get_image_wand(self);
141
+ unsigned char *blob;
142
+ long length;
143
+ Image* image;
144
+
145
+ blob = (unsigned char *)gmu_str2cstr(blob_arg, &length);
146
+ MagickPassFail status = MagickReadImageBlob(wand, blob, length);
147
+ gum_check_image_exception(wand, status);
148
+ return Qnil;
149
+ }
150
+
151
+ VALUE
152
+ gmi_write_image_blob(VALUE self) {
153
+ MagickWand *image = gmu_get_image_wand(self);
154
+ unsigned char *blob;
155
+ size_t length;
156
+ VALUE result;
157
+
158
+ blob = MagickWriteImageBlob(image, &length);
159
+ result = rb_str_new((char *)blob, (long)length);
160
+ MagickRelinquishMemory(blob);
161
+ return result;
162
+ }
163
+
164
+ VALUE
165
+ gmi_resize(int argc, VALUE *argv, VALUE self) {
166
+ if (argc < 2 || argc > 4) {
167
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 4)", argc);
168
+ }
169
+ long width = NUM2LONG(argv[0]);
170
+ long height = NUM2LONG(argv[1]);
171
+ int filter = argc > 2 ? NUM2INT(argv[2]) : 0;
172
+ double blur = argc > 3 ? NUM2DBL(argv[3]) : 1.0;
173
+
174
+ MagickWand *image = gmu_get_image_wand(self);
175
+ MagickPassFail status = MagickResizeImage(image, width, height, filter, blur);
176
+ gum_check_image_exception(image, status);
177
+ return Qnil;
178
+ }
179
+
180
+ VALUE
181
+ gmi_rotate(VALUE self, VALUE pixel_arg, VALUE degree_arg) {
182
+ MagickWand *image = gmu_get_image_wand(self);
183
+ PixelWand *pixel = gmu_get_pixel_string_or_pixel(pixel_arg);
184
+ double degree = NUM2DBL(degree_arg);
185
+ MagickPassFail status = MagickRotateImage(image, pixel, degree);
186
+ gmu_clear_pixel_string_or_pixel(pixel_arg, pixel);
187
+ gum_check_image_exception(image, status);
188
+ return Qnil;
189
+ }
190
+
191
+ VALUE
192
+ gmi_draw(VALUE self, VALUE drawing_arg)
193
+ {
194
+ MagickWand *image = gmu_get_image_wand(self);
195
+ DrawingWand *drawing = gmu_get_drawing_wand(drawing_arg);
196
+ MagickPassFail status = MagickDrawImage(image, drawing);
197
+ gum_check_image_exception(image, status);
198
+ return Qnil;
199
+ }
200
+
201
+ VALUE
202
+ gmi_resample(int argc, VALUE *argv, VALUE self) {
203
+ if (argc < 2 || argc > 4) {
204
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 2 or 4)", argc);
205
+ }
206
+ long x = NUM2LONG(argv[0]);
207
+ long y = NUM2LONG(argv[1]);
208
+ int filter = argc > 2 ? NUM2INT(argv[2]) : 0;
209
+ double blur = argc > 3 ? NUM2DBL(argv[3]) : 1.0;
210
+
211
+ MagickWand *image = gmu_get_image_wand(self);
212
+ MagickPassFail status = MagickResampleImage(image, x, y, filter, blur);
213
+ gum_check_image_exception(image, status);
214
+ return Qnil;
215
+ }
216
+
217
+ VALUE
218
+ gmi_flip(VALUE self) {
219
+ MagickWand *image = gmu_get_image_wand(self);
220
+ MagickPassFail status = MagickFlipImage(image);
221
+ gum_check_image_exception(image, status);
222
+ return Qnil;
223
+ }
224
+
225
+ VALUE
226
+ gmi_flop(VALUE self) {
227
+ MagickWand *image = gmu_get_image_wand(self);
228
+ MagickPassFail status = MagickFlopImage(image);
229
+ gum_check_image_exception(image, status);
230
+ return Qnil;
231
+ }
232
+
233
+ VALUE
234
+ gmi_crop(VALUE self, VALUE width_arg, VALUE height_arg, VALUE x_arg, VALUE y_arg) {
235
+ MagickWand *image = gmu_get_image_wand(self);
236
+ unsigned long width = NUM2LONG(width_arg);
237
+ unsigned long height = NUM2LONG(height_arg);
238
+ long x = NUM2LONG(x_arg);
239
+ long y = NUM2LONG(y_arg);
240
+ MagickPassFail status = MagickCropImage(image, width, height, x, y);
241
+ gum_check_image_exception(image, status);
242
+ return Qnil;
243
+ }
244
+
245
+ VALUE
246
+ gmi_set_format(VALUE self, VALUE format_arg) {
247
+ MagickWand *image = gmu_get_image_wand(self);
248
+ char *format = StringValuePtr(format_arg);
249
+ MagickPassFail status = MagickSetImageFormat(image, format);
250
+ gum_check_image_exception(image, status);
251
+ return Qnil;
252
+ }
253
+
254
+ VALUE
255
+ gmi_border(VALUE self, VALUE pixel_arg, VALUE width_arg, VALUE height_arg) {
256
+ MagickWand *image = gmu_get_image_wand(self);
257
+ PixelWand *pixel = gmu_get_pixel_string_or_pixel(pixel_arg);
258
+ unsigned long width = NUM2LONG(width_arg);
259
+ unsigned long height = NUM2LONG(height_arg);
260
+ MagickPassFail status = MagickBorderImage(image, pixel, width, height);
261
+ gmu_clear_pixel_string_or_pixel(pixel_arg, pixel);
262
+ gum_check_image_exception(image, status);
263
+ return Qnil;
264
+ }
265
+
266
+ VALUE
267
+ gmi_frame(VALUE self, VALUE pixel_arg, VALUE width_arg, VALUE height_arg, VALUE inner_arg, VALUE outer_arg) {
268
+ MagickWand *image = gmu_get_image_wand(self);
269
+ PixelWand *pixel = gmu_get_pixel_string_or_pixel(pixel_arg);
270
+ unsigned long width = NUM2LONG(width_arg);
271
+ unsigned long height = NUM2LONG(height_arg);
272
+ long inner = NUM2LONG(inner_arg);
273
+ long outer = NUM2LONG(outer_arg);
274
+ MagickPassFail status = MagickFrameImage(image, pixel, width, height, inner, outer);
275
+ gmu_clear_pixel_string_or_pixel(pixel_arg, pixel);
276
+ gum_check_image_exception(image, status);
277
+ return Qnil;
278
+ }
279
+
280
+ VALUE
281
+ gmi_blur(VALUE self, VALUE radius_arg, VALUE sigma_arg) {
282
+ MagickWand *image = gmu_get_image_wand(self);
283
+ double radius = NUM2DBL(radius_arg);
284
+ double sigma = NUM2DBL(sigma_arg);
285
+ MagickPassFail status = MagickBlurImage(image, radius, sigma);
286
+ gum_check_image_exception(image, status);
287
+ return Qnil;
288
+ }
289
+
290
+ VALUE
291
+ gmi_swirl(VALUE self, VALUE degree_arg) {
292
+ MagickWand *image = gmu_get_image_wand(self);
293
+ double degree = NUM2DBL(degree_arg);
294
+ MagickPassFail status = MagickSwirlImage(image, degree);
295
+ gum_check_image_exception(image, status);
296
+ return Qnil;
297
+ }
298
+
299
+ VALUE
300
+ gmi_charcoal(VALUE self, VALUE radius_arg, VALUE sigma_arg) {
301
+ MagickWand *image = gmu_get_image_wand(self);
302
+ double radius = NUM2DBL(radius_arg);
303
+ double sigma = NUM2DBL(sigma_arg);
304
+ MagickPassFail status = MagickCharcoalImage(image, radius, sigma);
305
+ gum_check_image_exception(image, status);
306
+ return Qnil;
307
+ }
308
+
309
+ VALUE
310
+ gmi_oil_paint(VALUE self, VALUE radius_arg) {
311
+ MagickWand *image = gmu_get_image_wand(self);
312
+ double radius = NUM2DBL(radius_arg);
313
+ MagickPassFail status = MagickOilPaintImage(image, radius);
314
+ gum_check_image_exception(image, status);
315
+ return Qnil;
316
+ }
317
+
318
+ VALUE
319
+ gmi_cycle_colormap(VALUE self, VALUE displace_arg) {
320
+ MagickWand *image = gmu_get_image_wand(self);
321
+ long displace = NUM2LONG(displace_arg);
322
+ MagickPassFail status = MagickCycleColormapImage(image, displace);
323
+ gum_check_image_exception(image, status);
324
+ return Qnil;
325
+ }
326
+
327
+ VALUE
328
+ gmi_solarize(VALUE self, VALUE threshold_arg) {
329
+ MagickWand *image = gmu_get_image_wand(self);
330
+ double threshold = NUM2DBL(threshold_arg);
331
+ MagickPassFail status = MagickSolarizeImage(image, threshold);
332
+ gum_check_image_exception(image, status);
333
+ return Qnil;
334
+ }
335
+
336
+ VALUE
337
+ gmi_shear(VALUE self, VALUE pixel_arg, VALUE x_arg, VALUE y_arg) {
338
+ MagickWand *image = gmu_get_image_wand(self);
339
+ PixelWand *pixel = gmu_get_pixel_string_or_pixel(pixel_arg);
340
+ double x = NUM2DBL(x_arg);
341
+ double y = NUM2DBL(y_arg);
342
+ MagickPassFail status = MagickShearImage(image, pixel, x, y);
343
+ gmu_clear_pixel_string_or_pixel(pixel_arg, pixel);
344
+ gum_check_image_exception(image, status);
345
+ return Qnil;
346
+ }
@@ -0,0 +1,97 @@
1
+ #include "gmagick.h"
2
+
3
+ VALUE Module_Gmagick;
4
+ VALUE Class_Image;
5
+ VALUE Class_Pixel;
6
+ VALUE Class_Drawing;
7
+
8
+ ID id_new;
9
+
10
+ void
11
+ Init_gmagickn(){
12
+ InitializeMagick(NULL);
13
+
14
+ Module_Gmagick = rb_define_module("Gmagick");
15
+ Class_Image = rb_define_class_under(Module_Gmagick, "Image", rb_cObject);
16
+ rb_define_alloc_func(Class_Image, gmi_alloc);
17
+ rb_define_private_method(Class_Image, "initialize", gmi_initialize, -1);
18
+ rb_define_method(Class_Image, "read", gmi_read_image, 1);
19
+ rb_define_method(Class_Image, "write", gmi_write_image, -1);
20
+ rb_define_method(Class_Image, "width", gmi_get_width, 0);
21
+ rb_define_method(Class_Image, "height", gmi_get_height, 0);
22
+ rb_define_method(Class_Image, "format", gmi_get_format, 0);
23
+ rb_define_method(Class_Image, "depth", gmi_get_depth, 0);
24
+ rb_define_method(Class_Image, "colors", gmi_get_colors, 0);
25
+ rb_define_method(Class_Image, "resolution", gmi_get_resolution, 0);
26
+ rb_define_method(Class_Image, "count", gmi_get_number_images, 0);
27
+ rb_define_method(Class_Image, "read_blob", gmi_read_image_blob, 1);
28
+ rb_define_method(Class_Image, "write_blob", gmi_write_image_blob, 0);
29
+ rb_define_method(Class_Image, "resize", gmi_resize, -1);
30
+ rb_define_method(Class_Image, "rotate", gmi_rotate, 2);
31
+ rb_define_method(Class_Image, "draw", gmi_draw, 1);
32
+ rb_define_method(Class_Image, "resample", gmi_resample, -1);
33
+ rb_define_method(Class_Image, "flip", gmi_flip, 0);
34
+ rb_define_method(Class_Image, "flop", gmi_flop, 0);
35
+ rb_define_method(Class_Image, "crop", gmi_crop, 4);
36
+ rb_define_method(Class_Image, "format=", gmi_set_format, 1);
37
+ rb_define_method(Class_Image, "border", gmi_border, 3);
38
+ rb_define_method(Class_Image, "frame", gmi_frame, 5);
39
+ rb_define_method(Class_Image, "blur", gmi_blur, 2);
40
+ rb_define_method(Class_Image, "swirl", gmi_swirl, 1);
41
+ rb_define_method(Class_Image, "charcoal", gmi_charcoal, 2);
42
+ rb_define_method(Class_Image, "oil_paint", gmi_oil_paint, 1);
43
+ rb_define_method(Class_Image, "cycle_colormap", gmi_cycle_colormap, 1);
44
+ rb_define_method(Class_Image, "solarize", gmi_solarize, 1);
45
+ rb_define_method(Class_Image, "shear", gmi_shear, 3);
46
+
47
+ Class_Pixel = rb_define_class_under(Module_Gmagick, "Pixel", rb_cObject);
48
+ rb_define_alloc_func(Class_Pixel, gmp_alloc);
49
+ rb_define_private_method(Class_Pixel, "initialize", gmp_initialize, -1);
50
+ rb_define_method(Class_Pixel, "color=", gmp_set_color, 1);
51
+ rb_define_method(Class_Pixel, "color", gmp_get_color, 0);
52
+ rb_define_method(Class_Pixel, "color_count=", gmp_set_color_count, 1);
53
+ rb_define_method(Class_Pixel, "color_count", gmp_get_color_count, 0);
54
+
55
+ Class_Drawing = rb_define_class_under(Module_Gmagick, "Drawing", rb_cObject);
56
+ rb_define_alloc_func(Class_Drawing, gmd_alloc);
57
+ rb_define_private_method(Class_Drawing, "initialize", gmd_initialize, 0);
58
+ rb_define_method(Class_Drawing, "annotation", gmd_annotation, 3);
59
+ rb_define_method(Class_Drawing, "arc", gmd_arc, 6);
60
+ rb_define_method(Class_Drawing, "circle", gmd_circle, 4);
61
+ rb_define_method(Class_Drawing, "ellipse", gmd_ellipse, -1);
62
+ rb_define_method(Class_Drawing, "line", gmd_line, 4);
63
+ rb_define_method(Class_Drawing, "point", gmd_point, 2);
64
+ rb_define_method(Class_Drawing, "rectangle", gmd_rectangle, 4);
65
+ rb_define_method(Class_Drawing, "rotate", gmd_rotate, 1);
66
+ rb_define_method(Class_Drawing, "scale", gmd_scale, 2);
67
+ rb_define_method(Class_Drawing, "fill_color=", gmd_set_fill_color, 1);
68
+ rb_define_method(Class_Drawing, "fill_color", gmd_get_fill_color, 0);
69
+ rb_define_method(Class_Drawing, "fill_opacity=", gmd_set_fill_opacity, 1);
70
+ rb_define_method(Class_Drawing, "fill_opacity", gmd_get_fill_opacity, 0);
71
+ rb_define_method(Class_Drawing, "font=", gmd_set_font, 1);
72
+ rb_define_method(Class_Drawing, "font", gmd_get_font, 0);
73
+ rb_define_method(Class_Drawing, "font_family=", gmd_set_font_family, 1);
74
+ rb_define_method(Class_Drawing, "font_family", gmd_get_font_family, 0);
75
+ rb_define_method(Class_Drawing, "font_size=", gmd_set_font_size, 1);
76
+ rb_define_method(Class_Drawing, "font_size", gmd_get_font_size, 0);
77
+ rb_define_method(Class_Drawing, "font_stretch=", gmd_set_font_stretch, 1);
78
+ rb_define_method(Class_Drawing, "font_stretch", gmd_get_font_stretch, 0);
79
+ rb_define_method(Class_Drawing, "font_style=", gmd_set_font_style, 1);
80
+ rb_define_method(Class_Drawing, "font_style", gmd_get_font_style, 0);
81
+ rb_define_method(Class_Drawing, "font_weight=", gmd_set_font_weight, 1);
82
+ rb_define_method(Class_Drawing, "font_weight", gmd_get_font_weight, 0);
83
+ rb_define_method(Class_Drawing, "round_rectangle", gmd_round_rectangle, 6);
84
+ rb_define_method(Class_Drawing, "stroke_color=", gmd_set_stroke_color, 1);
85
+ rb_define_method(Class_Drawing, "stroke_color", gmd_get_stroke_color, 0);
86
+ rb_define_method(Class_Drawing, "stroke_opacity=", gmd_set_stroke_opacity, 1);
87
+ rb_define_method(Class_Drawing, "stroke_opacity", gmd_get_stroke_opacity, 0);
88
+ rb_define_method(Class_Drawing, "stroke_width=", gmd_set_stroke_width, 1);
89
+ rb_define_method(Class_Drawing, "stroke_width", gmd_get_stroke_width, 0);
90
+ rb_define_method(Class_Drawing, "text_decoration=", gmd_set_text_decoration, 1);
91
+ rb_define_method(Class_Drawing, "text_decoration", gmd_get_text_decoration, 0);
92
+ rb_define_method(Class_Drawing, "text_encoding=", gmd_set_text_encoding, 1);
93
+ rb_define_method(Class_Drawing, "text_encoding", gmd_get_text_encoding, 0);
94
+
95
+
96
+ id_new = rb_intern("new");
97
+ }
@@ -0,0 +1,82 @@
1
+ #include "gmagick.h"
2
+
3
+ void
4
+ gmp_free(GmPixel *ptr)
5
+ {
6
+ if (ptr != (GmPixel *)NULL) {
7
+ if (ptr->wand != (PixelWand *)NULL) {
8
+ DestroyPixelWand(ptr->wand);
9
+ }
10
+ ruby_xfree(ptr);
11
+ }
12
+ }
13
+
14
+ VALUE
15
+ gmp_alloc(VALUE klass) {
16
+ GmPixel *ptr = ALLOC(GmPixel);
17
+ ptr->wand = (PixelWand *)NULL;
18
+ return Data_Wrap_Struct(klass, 0, gmp_free, ptr);
19
+ }
20
+
21
+ /*
22
+ * Document-method: new
23
+ *
24
+ * call-seq:
25
+ * Gmagick::Pixel.new -> pixel
26
+ * Gmagick::Pixel.new(color) -> pixel
27
+ *
28
+ * Create a GraphicsMagick Object
29
+ *
30
+ * [+color+]
31
+ * initialize color
32
+ *
33
+ * Examples:
34
+ *
35
+ * # Make pixel object
36
+ * Gmagick::Pixel.new
37
+ *
38
+ * # Make pixel object with color
39
+ * Gmagick::Pixel.new("#000000")
40
+ *
41
+ */
42
+ VALUE
43
+ gmp_initialize(int argc, VALUE *argv, VALUE self) {
44
+ volatile GmPixel *ptr;
45
+ Data_Get_Struct(self, GmPixel, ptr);
46
+ ptr->wand = NewPixelWand();
47
+ if (argc > 1) {
48
+ rb_raise(rb_eArgError, "wrong number of arguments (%d for 0 or 1)", argc);
49
+ }
50
+ if (argc > 0) {
51
+ gmp_set_color(self, argv[0]);
52
+ }
53
+ return Qnil;
54
+ }
55
+
56
+ VALUE
57
+ gmp_set_color(VALUE self, VALUE color_arg) {
58
+ char *color = StringValuePtr(color_arg);
59
+ PixelWand *pixel = gmu_get_pixel_wand(self);
60
+ PixelSetColor(pixel, color);
61
+ return Qnil;
62
+ }
63
+
64
+ VALUE
65
+ gmp_get_color(VALUE self) {
66
+ PixelWand *pixel = gmu_get_pixel_wand(self);
67
+ return rb_str_new2(PixelGetColorAsString(pixel));
68
+ }
69
+
70
+ VALUE
71
+ gmp_set_color_count(VALUE self, VALUE color_count_arg) {
72
+ unsigned long color_count = NUM2LONG(color_count_arg);
73
+ PixelWand *pixel = gmu_get_pixel_wand(self);
74
+ PixelSetColorCount(pixel, color_count);
75
+ return Qnil;
76
+ }
77
+
78
+ VALUE
79
+ gmp_get_color_count(VALUE self) {
80
+ PixelWand *pixel = gmu_get_pixel_wand(self);
81
+ return LONG2NUM(PixelGetColorCount(pixel));
82
+ }