Method: Magick::Image#density=
- Defined in:
- ext/RMagick/rmimage.cpp
#density=(density_arg) ⇒ Magick::Geometry, String
Set the vertical and horizontal resolution in pixels of the image.
-
The density is a string of the form “XresxYres” or simply “Xres”.
-
If the y resolution is not specified, set it equal to the x resolution.
-
This is equivalent to PerlMagick’s handling of density.
-
The density can also be a Geometry object. The width attribute is used for the x resolution. The height attribute is used for the y resolution. If the height attribute is missing, the width attribute is used for both.
5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 |
# File 'ext/RMagick/rmimage.cpp', line 5156
VALUE
Image_density_eq(VALUE self, VALUE density_arg)
{
Image *image;
char *density;
VALUE x_val, y_val;
int count;
double x_res, y_res;
image = rm_check_frozen(self);
// Get the Class ID for the Geometry class.
if (!Class_Geometry)
{
Class_Geometry = rb_const_get(Module_Magick, rm_ID_Geometry);
}
// Geometry object. Width and height attributes are always positive.
if (CLASS_OF(density_arg) == Class_Geometry)
{
x_val = rb_funcall(density_arg, rm_ID_width, 0);
x_res = NUM2DBL(x_val);
y_val = rb_funcall(density_arg, rm_ID_height, 0);
y_res = NUM2DBL(y_val);
if (x_res == 0.0)
{
rb_raise(rb_eArgError, "invalid x resolution: %f", x_res);
}
#if defined(IMAGEMAGICK_7)
image->resolution.y = y_res != 0.0 ? y_res : x_res;
image->resolution.x = x_res;
#else
image->y_resolution = y_res != 0.0 ? y_res : x_res;
image->x_resolution = x_res;
#endif
}
// Convert the argument to a string
else
{
density = StringValueCStr(density_arg);
if (!IsGeometry(density))
{
rb_raise(rb_eArgError, "invalid density geometry %s", density);
}
#if defined(IMAGEMAGICK_7)
count = sscanf(density, "%lfx%lf", &image->resolution.x, &image->resolution.y);
#else
count = sscanf(density, "%lfx%lf", &image->x_resolution, &image->y_resolution);
#endif
if (count < 2)
{
#if defined(IMAGEMAGICK_7)
image->resolution.y = image->resolution.x;
#else
image->y_resolution = image->x_resolution;
#endif
}
}
RB_GC_GUARD(x_val);
RB_GC_GUARD(y_val);
return density_arg;
}
|