Method: Magick::Image#change_geometry
- Defined in:
- ext/RMagick/rmimage.cpp
#change_geometry(geom_arg) {|column, row, image| ... } ⇒ Object
Note:
#change_geometry! is an alias for #change_geometry.
This method supports resizing a method by specifying constraints. For example, you can specify that the image should be resized such that the aspect ratio should be retained but the resulting image should be no larger than 640 pixels wide and 480 pixels tall.
2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 |
# File 'ext/RMagick/rmimage.cpp', line 2349
VALUE
Image_change_geometry(VALUE self, VALUE geom_arg)
{
Image *image;
RectangleInfo rect;
VALUE geom_str;
char *geometry;
unsigned int flags;
VALUE ary;
image = rm_check_destroyed(self);
geom_str = rb_String(geom_arg);
geometry = StringValueCStr(geom_str);
memset(&rect, 0, sizeof(rect));
SetGeometry(image, &rect);
flags = ParseMetaGeometry(geometry, &rect.x, &rect.y, &rect.width, &rect.height);
if (flags == NoValue)
{
rb_raise(rb_eArgError, "invalid geometry string `%s'", geometry);
}
ary = rb_ary_new2(3);
rb_ary_store(ary, 0, ULONG2NUM(rect.width));
rb_ary_store(ary, 1, ULONG2NUM(rect.height));
rb_ary_store(ary, 2, self);
RB_GC_GUARD(geom_str);
RB_GC_GUARD(ary);
return rb_yield(ary);
}
|