{-# OPTIONS -ffi #-} module Graphics.Transform.Magick.Magick(module Foreign.C.Types, module Foreign, module Foreign.C.String, module Control.Monad, initialize_magick, get_exception_info, clone_image_info, read_image, write_image, catch_exception, ------- transformations flip_image, flop_image, rotate_image, affine_transform, shear_image, chop_image, crop_image, flatten_images, mosaic_images, roll_image, shave_image, ------- resizing scale_image, magnify_image, minify_image, sample_image, thumbnail_image, resize_image, -- enhancements contrast_image, equalize_image, gamma_image, level_image, level_image_channel, modulate_image, negate_image, normalize_image, -- constitution constitute_image, dispatch_image, --export_image_pixel_area, export_pixel_area_options_init, import_image_pixel_area, import_pixel_area_options_init, ping_image, read_inline_image, -- composition composite_image, -- image methods access_definition, add_definitions, allocate_image, allocate_image_colormap, append_images, average_images, clip_path_image, cycle_colormap_image, describe_image, destroy_image, destroy_image_info, get_image_clip_mask, get_image_depth, get_image_characteristics, get_image_geometry, get_image_info, get_image_statistics, get_image_type, image_equals, is_taint_image, plasma_image, reference_image, remove_definitions, replace_image_colormap, set_image, set_image_clip_mask, set_image_depth, set_image_opacity, set_image_type, texture_image, -- stuff what displays stuff animate_images, --- util (internal use only!) p_free, clone_image, fopen, fclose) where import Graphics.Transform.Magick.Types import Foreign import Foreign.C.Types import Foreign.C.String import Control.Monad -- The internal interface to the GraphicsMagick library. This -- module should mostly (if not entirely) contain import declarations -- for foreign calls. -- also the place to dump in modules we'd like to re-export :-) --------------- Basics foreign import ccall "static magick/api.h InitializeMagick" initialize_magick :: Ptr a -> IO () foreign import ccall "static magick/api.h GetExceptionInfo" get_exception_info :: Ptr ExceptionInfo -> IO () foreign import ccall "static magick/api.h CloneImageInfo" clone_image_info :: Ptr HImageInfo -> IO (Ptr HImageInfo) foreign import ccall "static magick/api.h ReadImage" read_image :: Ptr HImageInfo -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h WriteImage" write_image :: Ptr HImageInfo -> Ptr HImage_ -> IO CUInt foreign import ccall "static magick/api.h CatchException" catch_exception :: Ptr ExceptionInfo -> IO () ----------------- Constituting an image foreign import ccall "static magick/api.h ConstituteImage" constitute_image :: CULong -> CULong -> CString -> CUInt -> Ptr a -> Ptr ExceptionInfo -> IO (Ptr HImage_) -- TODO: DestroyConstitute; do we need it? foreign import ccall "static magick/api.h DispatchImage" dispatch_image :: Ptr HImage_ -> CULong -> CULong -> CULong -> CULong -> CString -> CUInt -> Ptr a -> Ptr ExceptionInfo -> IO CUInt {- TODO: this doesn't seem to exist anymore... foreign import ccall "static magick/api.h ExportImagePixelArea" export_image_pixel_area :: Ptr HImage_ -> CUInt -> CUInt -> Ptr a -> Ptr ExportPixelAreaOptions -> Ptr ExportPixelAreaInfo -> IO CUInt -} foreign import ccall "static magick/api.h ExportPixelAreaOptionsInit" export_pixel_area_options_init :: Ptr ExportPixelAreaOptions -> IO () foreign import ccall "static magick/api.h ImportImagePixelArea" import_image_pixel_area :: Ptr HImage_ -> CUInt -> CUInt -> CString -> Ptr ImportPixelAreaOptions -> Ptr ImportPixelAreaInfo -> IO CUInt foreign import ccall "static magick/api.h ImportPixelAreaOptionsInit" import_pixel_area_options_init :: Ptr ImportPixelAreaOptions -> IO () foreign import ccall "static magick/api.h PingImage" ping_image :: Ptr HImageInfo -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h ReadInlineImage" read_inline_image :: Ptr HImageInfo -> CString -> Ptr ExceptionInfo -> IO (Ptr HImage_) ----------------- Transformations foreign import ccall "static magick/api.h FlipImage" flip_image :: Ptr HImage_ -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h FlopImage" flop_image :: Ptr HImage_ -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h RotateImage" rotate_image :: Ptr HImage_ -> CDouble -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h AffineTransformImage" affine_transform :: Ptr HImage_ -> Ptr AffineMatrix -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h ShearImage" shear_image :: Ptr HImage_ -> CDouble -> CDouble -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h ChopImage" chop_image :: Ptr HImage_ -> Ptr Rectangle -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h CropImage" crop_image :: Ptr HImage_ -> Ptr Rectangle -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h FlattenImages" flatten_images :: Ptr HImage_ -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h MosaicImages" mosaic_images :: Ptr HImage_ -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h RollImage" roll_image :: Ptr HImage_ -> CLong -> CLong -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h ShaveImage" shave_image :: Ptr HImage_ -> Ptr Rectangle -> Ptr ExceptionInfo -> IO (Ptr HImage_) ----------------- Resizing foreign import ccall "static magick/api.h ScaleImage" scale_image :: Ptr HImage_ -> CULong -> CULong -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h MagnifyImage" magnify_image :: Ptr HImage_ -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h MinifyImage" minify_image :: Ptr HImage_ -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h SampleImage" sample_image :: Ptr HImage_ -> CULong -> CULong -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h ThumbnailImage" thumbnail_image :: Ptr HImage_ -> CULong -> CULong -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h ResizeImage" resize_image :: Ptr HImage_ -> CULong -> CULong -> CUInt -> CDouble -> Ptr ExceptionInfo -> IO (Ptr HImage_) ---------- Enhancements -- Note that these side-effect the image! Higher-level API -- has to hide this from the user via copying. foreign import ccall "static magick/api.h ContrastImage" contrast_image :: Ptr HImage_ -> CUInt -> IO CUInt foreign import ccall "static magick/api.h EqualizeImage" equalize_image :: Ptr HImage_ -> IO CUInt foreign import ccall "static magick/api.h GammaImage" gamma_image :: Ptr HImage_ -> CString -> IO CUInt foreign import ccall "static magick/api.h LevelImage" level_image :: Ptr HImage_ -> CString -> IO CUInt foreign import ccall "static magick/api.h LevelImageChannel" level_image_channel :: Ptr HImage_ -> CUInt -> CDouble -> CDouble -> CDouble -> IO CUInt foreign import ccall "static magick/api.h ModulateImage" modulate_image :: Ptr HImage_ -> CString -> IO CUInt foreign import ccall "static magick/api.h NegateImage" negate_image :: Ptr HImage_ -> CUInt -> IO CUInt foreign import ccall "static magick/api.h NormalizeImage" normalize_image :: Ptr HImage_ -> IO CUInt ---------- Composition foreign import ccall "static magick/api.h CompositeImage" composite_image :: Ptr HImage_ -> CUInt -> Ptr HImage_ -> CLong -> CLong -> IO CUInt ---------- Image methods foreign import ccall "static magick/api.h AccessDefinition" access_definition :: Ptr HImageInfo -> CString -> CString -> IO CString foreign import ccall "static magick/api.h AddDefinitions" add_definitions :: Ptr HImageInfo -> CString -> IO () foreign import ccall "static magick/api.h AllocateImage" allocate_image :: Ptr HImageInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h AllocateImageColormap" allocate_image_colormap :: Ptr HImage_ -> CULong -> IO CUInt foreign import ccall "static magick/api.h AnimateImages" animate_images :: Ptr HImageInfo -> Ptr HImage_ -> IO CUInt foreign import ccall "static magick/api.h AppendImages" append_images :: Ptr HImage_ -> CUInt -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h AverageImages" average_images :: Ptr HImage_ -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall "static magick/api.h ClipPathImage" clip_path_image :: Ptr HImage_ -> CString -> CUInt -> IO CUInt foreign import ccall "static magick/api.h CycleColormapImage" cycle_colormap_image :: Ptr HImage_ -> CInt -> IO CUInt foreign import ccall "static magick/api.h DescribeImage" describe_image :: Ptr HImage_ -> Ptr CFile -> CUInt -> IO CUInt foreign import ccall "static magick/api.h DestroyImage" destroy_image :: Ptr HImage_ -> IO () foreign import ccall "static magick/api.h DestroyImageInfo" destroy_image_info :: Ptr HImageInfo -> IO () foreign import ccall "static magick/api.h GetImageClipMask" get_image_clip_mask :: Ptr HImage_ -> Ptr ExceptionInfo -> Ptr HImage_ foreign import ccall "static magick/api.h GetImageDepth" get_image_depth :: Ptr HImage_ -> Ptr ExceptionInfo -> IO CULong foreign import ccall "static magick/api.h GetImageCharacteristics" get_image_characteristics :: Ptr HImage_ -> Ptr ImageCharacteristics -> CUInt -> Ptr ExceptionInfo -> IO CUInt foreign import ccall "static magick/api.h GetImageGeometry" get_image_geometry :: Ptr HImage_ -> CString -> CUInt -> Ptr Rectangle -> IO CInt foreign import ccall "static magick/api.h GetImageInfo" get_image_info :: Ptr HImageInfo -> IO () foreign import ccall "static magick/api.h GetImageStatistics" get_image_statistics :: Ptr HImage_ -> Ptr ImageStatistics -> Ptr ExceptionInfo -> IO CUInt foreign import ccall "static magick/api.h GetImageType" get_image_type :: Ptr HImage_ -> Ptr ExceptionInfo -> IO ImageType foreign import ccall "static magick/api.h IsImagesEqual" image_equals :: Ptr HImage_ -> Ptr HImage_ -> IO CUInt foreign import ccall "static magick/api.h IsTaintImage" is_taint_image :: Ptr HImage_ -> IO CUInt foreign import ccall "static magick/api.h PlasmaImage" plasma_image :: Ptr HImage_ -> Ptr SegmentInfo -> CULong -> CULong -> IO CUInt foreign import ccall "static magick/api.h ReferenceImage" reference_image :: Ptr HImage_ -> IO (Ptr HImage_) foreign import ccall "static magick/api.h RemoveDefinitions" remove_definitions :: Ptr HImageInfo -> CString -> Ptr ExceptionInfo -> IO () foreign import ccall "static magick/api.h ReplaceImageColormap" replace_image_colormap :: Ptr HImage_ -> Ptr (PixelPacket Word16) -> CUInt -> IO CUInt foreign import ccall "static magick/api.h SetImage" set_image :: Ptr HImage_ -> CUInt -> IO () foreign import ccall "static magick/api.h SetImageClipMask" set_image_clip_mask :: Ptr HImage_ -> Ptr HImage_ -> IO CUInt foreign import ccall "static magick/api.h SetImageDepth" set_image_depth :: Ptr HImage_ -> CULong -> IO CUInt foreign import ccall "static magick/api.h SetImageOpacity" set_image_opacity :: Ptr HImage_ -> CUInt -> IO () foreign import ccall "static magick/api.h SetImageType" set_image_type :: Ptr HImage_ -> ImageType -> IO () foreign import ccall "static magick/api.h TextureImage" texture_image :: Ptr HImage_ -> Ptr HImage_ -> IO CUInt ---------- util (internal library use only) foreign import ccall "stdlib.h &free" p_free :: FunPtr (Ptr a -> IO ()) foreign import ccall "static magick/api.h CloneImage" clone_image :: Ptr HImage_ -> CULong -> CULong -> CUInt -> Ptr ExceptionInfo -> IO (Ptr HImage_) foreign import ccall unsafe "stdlib.h fopen" fopen :: CString -> CString -> IO (Ptr CFile) foreign import ccall unsafe "stdlib.h fclose" fclose :: Ptr CFile -> IO ()