You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
7.4 KiB
Python
179 lines
7.4 KiB
Python
""":mod:`wand.cdefs.pixel_wand` --- Pixel-Wand definitions
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
.. versionadded:: 0.5.0
|
|
"""
|
|
import numbers
|
|
import platform
|
|
from ctypes import (CDLL, POINTER, c_char_p, c_double, c_float, c_int,
|
|
c_longdouble, c_size_t, c_ubyte, c_uint, c_ushort,
|
|
c_void_p)
|
|
|
|
__all__ = ('load',)
|
|
|
|
|
|
def load(lib, IM_VERSION, IM_QUANTUM_DEPTH, IM_HDRI):
|
|
"""Define Pixel Wand methods. The ImageMagick version is given as
|
|
a second argument for comparison. This will quick to determine which
|
|
methods are available from the library, and can be implemented as::
|
|
|
|
if IM_VERSION < 0x700:
|
|
# ... do ImageMagick-6 methods ...
|
|
else
|
|
# ... do ImageMagick-7 methods ...
|
|
|
|
.. seealso::
|
|
|
|
#include "wand/pixel-wand.h"
|
|
// Or
|
|
#include "MagickWand/pixel-wand.h"
|
|
|
|
Mapping Pixel methods also requires the wand library to evaluate
|
|
what "Quantum" is to ImageMagick. We must query the library
|
|
to identify if HDRI is enabled, and what the quantum depth is.
|
|
|
|
.. seealso::
|
|
|
|
MagickCore/magick-type.h
|
|
|
|
:param lib: the loaded ``MagickWand`` library.
|
|
:type lib: :class:`ctypes.CDLL`
|
|
:param IM_VERSION: the ImageMagick version number (i.e. 0x0689).
|
|
:type IM_VERSION: :class:`numbers.Integral`
|
|
:param IM_QUANTUM_DEPTH: the ImageMagick Quantum Depth
|
|
(must be 8, 16, 32, or 64).
|
|
:type IM_QUANTUM_DEPTH: :class:`numbers.Integral`
|
|
:param IM_HDRI: if ImageMagick was compiled with HDRI support.
|
|
:type IM_HDRI: :class:`bool`
|
|
|
|
.. versionadded:: 0.5.0
|
|
|
|
"""
|
|
if not isinstance(lib, CDLL):
|
|
raise AttributeError(repr(lib) + " is not an instanced of ctypes.CDLL")
|
|
if not isinstance(IM_VERSION, numbers.Integral):
|
|
raise AttributeError("Expecting MagickCore version number")
|
|
if IM_QUANTUM_DEPTH not in [8, 16, 32, 65]:
|
|
raise AttributeError("QUANTUM_DEPTH must be one of 8, 16, 32, or 64")
|
|
is_im_6 = IM_VERSION < 0x700
|
|
is_im_7 = IM_VERSION >= 0x700
|
|
|
|
# Check for IBM Z Systems, or where `double_t` is defined.
|
|
if platform.machine() in ['s390', 's390x', 'i686']:
|
|
FloatType = c_double
|
|
else:
|
|
FloatType = c_float
|
|
|
|
if IM_QUANTUM_DEPTH == 8:
|
|
QuantumType = FloatType if IM_HDRI else c_ubyte
|
|
elif IM_QUANTUM_DEPTH == 16:
|
|
QuantumType = FloatType if IM_HDRI else c_ushort
|
|
elif IM_QUANTUM_DEPTH == 32:
|
|
QuantumType = c_double if IM_HDRI else c_uint
|
|
elif IM_QUANTUM_DEPTH == 64:
|
|
QuantumType = c_longdouble
|
|
|
|
lib.ClearPixelWand.argtypes = [c_void_p]
|
|
lib.ClonePixelWand.argtypes = [c_void_p]
|
|
lib.ClonePixelWand.restype = c_void_p
|
|
lib.DestroyPixelWand.argtypes = [c_void_p]
|
|
lib.DestroyPixelWand.restype = c_void_p
|
|
lib.DestroyPixelWands.argtypes = [POINTER(c_void_p), c_size_t]
|
|
lib.DestroyPixelWands.restype = POINTER(c_void_p)
|
|
lib.IsPixelWand.argtypes = [c_void_p]
|
|
lib.IsPixelWandSimilar.argtypes = [c_void_p, c_void_p, c_double]
|
|
lib.NewPixelWand.argtypes = []
|
|
lib.NewPixelWand.restype = c_void_p
|
|
lib.PixelClearException.argtypes = [c_void_p]
|
|
lib.PixelClearException.restype = c_int
|
|
lib.PixelGetAlpha.argtypes = [c_void_p]
|
|
lib.PixelGetAlpha.restype = c_double
|
|
lib.PixelGetAlphaQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetAlphaQuantum.restype = QuantumType
|
|
lib.PixelGetBlack.argtypes = [c_void_p]
|
|
lib.PixelGetBlack.restype = c_double
|
|
lib.PixelGetBlackQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetBlackQuantum.restype = QuantumType
|
|
lib.PixelGetBlue.argtypes = [c_void_p]
|
|
lib.PixelGetBlue.restype = c_double
|
|
lib.PixelGetBlueQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetBlueQuantum.restype = QuantumType
|
|
lib.PixelGetColorAsNormalizedString.argtypes = [c_void_p]
|
|
lib.PixelGetColorAsNormalizedString.restype = c_void_p
|
|
lib.PixelGetColorAsString.argtypes = [c_void_p]
|
|
lib.PixelGetColorAsString.restype = c_void_p
|
|
lib.PixelGetColorCount.argtypes = [c_void_p]
|
|
lib.PixelGetColorCount.restype = c_size_t
|
|
lib.PixelGetCyan.argtypes = [c_void_p]
|
|
lib.PixelGetCyan.restype = c_double
|
|
lib.PixelGetCyanQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetCyanQuantum.restype = QuantumType
|
|
lib.PixelGetException.argtypes = [c_void_p, POINTER(c_int)]
|
|
lib.PixelGetException.restype = c_void_p
|
|
lib.PixelGetExceptionType.argtypes = [c_void_p]
|
|
lib.PixelGetExceptionType.restype = c_int
|
|
lib.PixelGetFuzz.argtypes = [c_void_p]
|
|
lib.PixelGetFuzz.restype = c_double
|
|
lib.PixelGetGreen.argtypes = [c_void_p]
|
|
lib.PixelGetGreen.restype = c_double
|
|
lib.PixelGetGreenQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetGreenQuantum.restype = QuantumType
|
|
lib.PixelGetHSL.argtypes = [c_void_p,
|
|
POINTER(c_double),
|
|
POINTER(c_double),
|
|
POINTER(c_double)]
|
|
lib.PixelGetIndex.argtypes = [c_void_p]
|
|
lib.PixelGetIndex.restype = QuantumType
|
|
lib.PixelGetMagenta.argtypes = [c_void_p]
|
|
lib.PixelGetMagenta.restype = c_double
|
|
lib.PixelGetMagentaQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetMagentaQuantum.restype = QuantumType
|
|
lib.PixelGetMagickColor.argtypes = [c_void_p, c_void_p]
|
|
if is_im_7:
|
|
lib.PixelGetPixel.argtypes = [c_void_p]
|
|
lib.PixelGetPixel.restype = c_void_p
|
|
lib.PixelGetRed.argtypes = [c_void_p]
|
|
lib.PixelGetRed.restype = c_double
|
|
lib.PixelGetRedQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetRedQuantum.restype = QuantumType
|
|
lib.PixelGetYellow.argtypes = [c_void_p]
|
|
lib.PixelGetYellow.restype = c_double
|
|
lib.PixelGetYellowQuantum.argtypes = [c_void_p]
|
|
lib.PixelGetYellowQuantum.restype = QuantumType
|
|
lib.PixelSetAlpha.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetAlphaQuantum.argtypes = [c_void_p, QuantumType]
|
|
lib.PixelSetBlack.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetBlackQuantum.argtypes = [c_void_p, QuantumType]
|
|
lib.PixelSetBlue.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetBlueQuantum.argtypes = [c_void_p, QuantumType]
|
|
lib.PixelSetColor.argtypes = [c_void_p, c_char_p]
|
|
lib.PixelSetColor.restype = c_int
|
|
lib.PixelSetColorCount.argtypes = [c_void_p, c_size_t]
|
|
lib.PixelSetCyan.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetCyanQuantum.argtypes = [c_void_p, QuantumType]
|
|
lib.PixelSetFuzz.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetGreen.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetGreenQuantum.argtypes = [c_void_p, QuantumType]
|
|
lib.PixelSetHSL.argtypes = [c_void_p, c_double, c_double, c_double]
|
|
lib.PixelSetIndex.argtypes = [c_void_p, QuantumType]
|
|
lib.PixelSetMagenta.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetMagentaQuantum.argtypes = [c_void_p, QuantumType]
|
|
if is_im_6:
|
|
lib.PixelSetMagickColor.argtypes = [c_void_p, c_void_p]
|
|
else:
|
|
lib.PixelSetMagickColor = None
|
|
if is_im_7:
|
|
lib.PixelSetPixelColor.argtypes = [c_void_p, c_void_p]
|
|
else:
|
|
lib.PixelSetPixelColor = None
|
|
lib.PixelSetRed.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetRedQuantum.argtypes = [c_void_p, QuantumType]
|
|
lib.PixelSetYellow.argtypes = [c_void_p, c_double]
|
|
lib.PixelSetYellowQuantum.argtypes = [c_void_p, QuantumType]
|
|
if is_im_6:
|
|
lib.PixelSetMagickColor.argtypes = [c_void_p, c_void_p]
|
|
lib.PixelSetPixelColor = None
|
|
if is_im_7:
|
|
lib.PixelSetMagickColor = None
|
|
lib.PixelSetPixelColor.argtypes = [c_void_p, c_void_p]
|