From 30b3be2f0b0fe1384a7a84a5e28c64c4841f59a0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 1 Sep 2012 00:37:47 +0530 Subject: [PATCH] ImageMagick: get and set image color depth --- src/calibre/utils/magick/magick.c | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/calibre/utils/magick/magick.c b/src/calibre/utils/magick/magick.c index f01af3a552..94ac4dae83 100644 --- a/src/calibre/utils/magick/magick.c +++ b/src/calibre/utils/magick/magick.c @@ -1104,6 +1104,40 @@ magick_Image_type_setter(magick_Image *self, PyObject *val, void *closure) { // }}} +// Image.depth {{{ +static PyObject * +magick_Image_depth_getter(magick_Image *self, void *closure) { + NULL_CHECK(NULL) + + return Py_BuildValue("n", MagickGetImageDepth(self->wand)); +} + +static int +magick_Image_depth_setter(magick_Image *self, PyObject *val, void *closure) { + size_t depth; + + NULL_CHECK(-1) + + if (val == NULL) { + PyErr_SetString(PyExc_TypeError, "Cannot delete image depth"); + return -1; + } + + if (!PyInt_Check(val)) { + PyErr_SetString(PyExc_TypeError, "Depth must be an integer"); + return -1; + } + + depth = (size_t)PyInt_AsSsize_t(val); + if (!MagickSetImageDepth(self->wand, depth)) { + PyErr_Format(PyExc_ValueError, "Could not set image depth to %lu", depth); + return -1; + } + + return 0; +} + +// }}} // Image.destroy {{{ static PyObject * @@ -1260,6 +1294,12 @@ static PyGetSetDef magick_Image_getsetters[] = { (char *)"the image type: UndefinedType, BilevelType, GrayscaleType, GrayscaleMatteType, PaletteType, PaletteMatteType, TrueColorType, TrueColorMatteType, ColorSeparationType, ColorSeparationMatteType, or OptimizeType.", NULL}, + {(char *)"depth", + (getter)magick_Image_depth_getter, (setter)magick_Image_depth_setter, + (char *)"the image depth.", + NULL}, + + {NULL} /* Sentinel */ };