From f7044272c8080d2e1e67e418d398f047f363d475 Mon Sep 17 00:00:00 2001 From: sekelsenmat <sekelsenmat@idefix.freepascal.org> Date: Thu, 29 Oct 2009 17:16:38 +0000 Subject: [PATCH] imagemagick: Adds a pixel access demo and updates some parts to newer imagemagick git-svn-id: trunk@13967 - --- .gitattributes | 2 + packages/imagemagick/examples/image.png | Bin 12989 -> 9417 bytes packages/imagemagick/examples/wanddemo.lpr | 1 + .../imagemagick/examples/wandpixelaccess.pas | 84 ++++++++++++++++++ packages/imagemagick/src/cache.inc | 66 ++++++++++++++ packages/imagemagick/src/imagemagick.pas | 13 ++- packages/imagemagick/src/magick_wand.pas | 5 +- packages/imagemagick/src/pixel.inc | 2 + packages/imagemagick/src/pixel_wand.inc | 8 +- 9 files changed, 177 insertions(+), 4 deletions(-) create mode 100644 packages/imagemagick/examples/wandpixelaccess.pas create mode 100644 packages/imagemagick/src/cache.inc diff --git a/.gitattributes b/.gitattributes index 44b294f844..72d9167448 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2825,8 +2825,10 @@ packages/imagemagick/examples/image.png -text svneol=unset#image/png packages/imagemagick/examples/screenshot.lpr svneol=native#text/plain packages/imagemagick/examples/wanddemo.dpr svneol=native#text/plain packages/imagemagick/examples/wanddemo.lpr svneol=native#text/plain +packages/imagemagick/examples/wandpixelaccess.pas svneol=native#text/plain packages/imagemagick/fpmake.pp svneol=native#text/plain packages/imagemagick/src/buildim.pp svneol=native#text/plain +packages/imagemagick/src/cache.inc svneol=native#text/plain packages/imagemagick/src/cache_view.inc svneol=native#text/plain packages/imagemagick/src/compare.inc svneol=native#text/plain packages/imagemagick/src/constitute.inc svneol=native#text/plain diff --git a/packages/imagemagick/examples/image.png b/packages/imagemagick/examples/image.png index 8fbd918b799b3dac773600185dd4ba7e998e37c9..6840f5f32c8fb809854344785299214a0fbaf53b 100644 GIT binary patch literal 9417 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 literal 12989 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 OWLj$asujwpu>S*slomPw diff --git a/packages/imagemagick/examples/wanddemo.lpr b/packages/imagemagick/examples/wanddemo.lpr index 25e2ec44a4..44a6e3685b 100644 --- a/packages/imagemagick/examples/wanddemo.lpr +++ b/packages/imagemagick/examples/wanddemo.lpr @@ -28,6 +28,7 @@ end; var status: MagickBooleanType; wand: PMagickWand; + begin { Read an image. } diff --git a/packages/imagemagick/examples/wandpixelaccess.pas b/packages/imagemagick/examples/wandpixelaccess.pas new file mode 100644 index 0000000000..b7d1c9a762 --- /dev/null +++ b/packages/imagemagick/examples/wandpixelaccess.pas @@ -0,0 +1,84 @@ +{ + Demonstration program for the ImageMagick Library + + Usage: Just execute the program. It will change all black pixels + in the image.png image on it's directory to be transparent + and then it will save it as image2.png + The idea is to demonstrate pixel access using MagickWand. +} +program wandpixelaccess; + +{$mode objfpc}{$H+} + +uses SysUtils, magick_wand, ImageMagick, ctypes; + +procedure ThrowWandException(wand: PMagickWand); +var + description: PChar; + severity: ExceptionType; +begin + description := MagickGetException(wand, @severity); + WriteLn(Format('An error ocurred. Description: %s', [description])); + description := MagickRelinquishMemory(description); + Abort; +end; + +var + status: MagickBooleanType; + wand: PMagickWand = nil; + pixel: MagickPixelPacket; + iterator: PPixelIterator; + pixels: PPPixelWand = nil; + x, y: Integer; + width: culong; +begin + { Read an image. } + + MagickWandGenesis; + + wand := NewMagickWand(); + + try + status := MagickReadImage(wand, 'image.png'); + if (status = MagickFalse) then ThrowWandException(wand); + + iterator := NewPixelIterator(wand); + if (iterator = nil) then ThrowWandException(wand); + + for y := 0 to MagickGetImageHeight(wand) - 1 do + begin +// WriteLn(' Line ', y, ' from ', MagickGetImageHeight(wand) - 1); + pixels := PixelGetNextIteratorRow(iterator, width); + if (pixels = nil) then Break; + + for x := 0 to width - 1 do + begin +// WriteLn(Format(' x %d y %d r %f g %f b %f o %f', +// [x, y, pixel.red, pixel.green, pixel.blue, pixel.opacity])); + PixelGetMagickColor(pixels[x], @pixel); + if (pixel.red = 0.0) and + (pixel.green = 0.0) and + (pixel.blue = 0.0) then + begin + pixel.opacity := QuantumRange; + pixel.matte := QuantumRange; // matte=alpha + end; + PixelSetMagickColor(pixels[x], @pixel); + end; + PixelSyncIterator(iterator); + end; + +// if y < MagickGetImageHeight(wand) then ThrowWandException(wand); + iterator := DestroyPixelIterator(iterator); + + { Write the image } + + status := MagickWriteImage(wand, 'image2.png'); + if (status = MagickFalse) then ThrowWandException(wand); + finally + { Clean-up } + if wand <> nil then wand := DestroyMagickWand(wand); + MagickWandTerminus; + end; +end. + diff --git a/packages/imagemagick/src/cache.inc b/packages/imagemagick/src/cache.inc new file mode 100644 index 0000000000..7e69489921 --- /dev/null +++ b/packages/imagemagick/src/cache.inc @@ -0,0 +1,66 @@ +{ + Copyright 1999-2009 ImageMagick Studio LLC, a non-profit organization + dedicated to making software imaging solutions freely available. + + You may not use this file except in compliance with the License. + obtain a copy of the License at + + http://www.imagemagick.org/script/license.php + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + MagickCore cache methods. +} +{ + Based on ImageMagick 6.5.7 +} + +//#include "magick/blob.h" + +{extern MagickExport const IndexPacket + *GetVirtualIndexQueue(const Image *); + +extern MagickExport const PixelPacket + *GetVirtualPixels(const Image *,const long,const long,const unsigned long, + const unsigned long,ExceptionInfo *), + *GetVirtualPixelQueue(const Image *); + +extern MagickExport IndexPacket + *GetAuthenticIndexQueue(const Image *); + +extern MagickExport MagickBooleanType + GetOneVirtualMagickPixel(const Image *,const long,const long, + MagickPixelPacket *,ExceptionInfo *), + GetOneVirtualPixel(const Image *,const long,const long,PixelPacket *, + ExceptionInfo *), + GetOneVirtualMethodPixel(const Image *,const VirtualPixelMethod,const long, + const long,PixelPacket *,ExceptionInfo *), + GetOneAuthenticPixel(Image *,const long,const long,PixelPacket *, + ExceptionInfo *), + InstantiateCacheComponent(void), + PersistPixelCache(Image *,const char *,const MagickBooleanType, + MagickOffsetType *,ExceptionInfo *), + SyncAuthenticPixels(Image *,ExceptionInfo *); + +extern MagickExport MagickSizeType + GetImageExtent(const Image *);} + +//extern MagickExport PixelPacket +function GetAuthenticPixels(_image: PImage; const x, y: clong; + const columns, rows: culong; exception: PExceptionInfo + ): PPixelPacket; cdecl; external MagickExport; +// *GetAuthenticPixelQueue(const Image *), +// *QueueAuthenticPixels(Image *,const long,const long,const unsigned long, +// const unsigned long,ExceptionInfo *); + +{extern MagickExport VirtualPixelMethod + GetPixelCacheVirtualMethod(const Image *), + SetPixelCacheVirtualMethod(const Image *,const VirtualPixelMethod); + +extern MagickExport void + DestroyCacheFaclity(void);} + diff --git a/packages/imagemagick/src/imagemagick.pas b/packages/imagemagick/src/imagemagick.pas index f44d2b3cc0..2446da2091 100644 --- a/packages/imagemagick/src/imagemagick.pas +++ b/packages/imagemagick/src/imagemagick.pas @@ -14,7 +14,8 @@ limitations under the License. ImageMagick Application Programming Interface declarations. - +} +{ Converted from c by: Felipe Monteiro de Carvalho Dez/2005 Bug-fixed by �ngel Eduardo Garc�a Hern�ndez @@ -34,10 +35,18 @@ uses SysUtils, ctypes; {$PACKENUM 4} +// Fix to compile in older FPC versions +{$ifdef VER2_2} +type + Pcsize_t = ^size_t; +{$endif} + const {$ifdef Win32} + MagickExport = 'CORE_RL_magick_.dll'; WandExport = 'CORE_RL_wand_.dll'; {$else} + MagickExport = 'libMagickCore'; WandExport = 'libWand'; {$endif} @@ -50,7 +59,7 @@ const {#$include annotate.inc} {#$include attribute.inc} {#$include blob.inc} -{#$include cache.inc} +{$include cache.inc} {$include cache_view.inc} {#include "magick/coder.h" #include "magick/client.h" diff --git a/packages/imagemagick/src/magick_wand.pas b/packages/imagemagick/src/magick_wand.pas index bd246dbcd4..0cd7bbe742 100644 --- a/packages/imagemagick/src/magick_wand.pas +++ b/packages/imagemagick/src/magick_wand.pas @@ -14,7 +14,10 @@ limitations under the License. ImageMagick MagickWand API. - +} +{ + Based on ImageMagick 6.2 + Converted from c by: Felipe Monteiro de Carvalho Dez/2005 Bug-fixed by �ngel Eduardo Garc�a Hern�ndez diff --git a/packages/imagemagick/src/pixel.inc b/packages/imagemagick/src/pixel.inc index e0138f7399..bf8ab9999c 100644 --- a/packages/imagemagick/src/pixel.inc +++ b/packages/imagemagick/src/pixel.inc @@ -54,6 +54,8 @@ type type MagickPixelPacket = record + storage_class: ClassType; // Added after 6.2 + colorspace: ColorspaceType; matte: MagickBooleanType; diff --git a/packages/imagemagick/src/pixel_wand.inc b/packages/imagemagick/src/pixel_wand.inc index d650ea7742..3f0194be11 100644 --- a/packages/imagemagick/src/pixel_wand.inc +++ b/packages/imagemagick/src/pixel_wand.inc @@ -82,7 +82,7 @@ function PixelGetYellowQuantum(const wand: PPixelWand): Quantum; cdecl; external function PixelGetColorCount(const wand: PPixelWand): culong; cdecl; external WandExport; procedure ClearPixelWand(wand: PPixelWand); cdecl; external WandExport; -procedure PixelGetMagickColor(const wand: PPixelWand; packet: PMagickPixelPacket); cdecl; external WandExport; +// PixelGetHSL(const PixelWand *,double *,double *,double *), // Added after 6.2 procedure PixelGetQuantumColor(const wand: PPixelWand; color: PPixelPacket); cdecl; external WandExport; procedure PixelSetAlpha(wand: PPixelWand; const opacity: Double); cdecl; external WandExport; procedure PixelSetAlphaQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; @@ -90,14 +90,18 @@ procedure PixelSetBlack(wand: PPixelWand; const opacity: Double); cdecl; externa procedure PixelSetBlackQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; procedure PixelSetBlue(wand: PPixelWand; const opacity: Double); cdecl; external WandExport; procedure PixelSetBlueQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; +// PixelSetColorFromWand(PixelWand *,const PixelWand *), // Added after 6.2 procedure PixelSetColorCount(wand: PPixelWand; const count: culong); cdecl; external WandExport; procedure PixelSetCyan(wand: PPixelWand; const opacity: Double); cdecl; external WandExport; procedure PixelSetCyanQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; +// PixelSetFuzz(PixelWand *,const double), // Added after 6.2 procedure PixelSetGreen(wand: PPixelWand; const opacity: Double); cdecl; external WandExport; procedure PixelSetGreenQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; +// PixelSetHSL(PixelWand *,const double,const double,const double), // Added after 6.2 procedure PixelSetIndex(wand: PPixelWand; const index: IndexPacket); cdecl; external WandExport; procedure PixelSetMagenta(wand: PPixelWand; const opacity: Double); cdecl; external WandExport; procedure PixelSetMagentaQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; +procedure PixelSetMagickColor(wand: PPixelWand; const color: PMagickPixelPacket); cdecl; external WandExport; // Added after 6.2 procedure PixelSetOpacity(wand: PPixelWand; const opacity: Double); cdecl; external WandExport; procedure PixelSetOpacityQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; procedure PixelSetQuantumColor(wand: PPixelWand; const color: PPixelPacket); cdecl; external WandExport; @@ -106,4 +110,6 @@ procedure PixelSetRedQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; e procedure PixelSetYellow(wand: PPixelWand; const opacity: Double); cdecl; external WandExport; procedure PixelSetYellowQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport; +// Considered a private method in newer versions (after 6.2) +procedure PixelGetMagickColor(const wand: PPixelWand; packet: PMagickPixelPacket); cdecl; external WandExport;