Browse Source

imagemagick: Adds a pixel access demo and updates some parts to newer imagemagick

git-svn-id: trunk@13967 -
sekelsenmat 16 years ago
parent
commit
f7044272c8

+ 2 - 0
.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/screenshot.lpr svneol=native#text/plain
 packages/imagemagick/examples/wanddemo.dpr 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/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/fpmake.pp svneol=native#text/plain
 packages/imagemagick/src/buildim.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/cache_view.inc svneol=native#text/plain
 packages/imagemagick/src/compare.inc svneol=native#text/plain
 packages/imagemagick/src/compare.inc svneol=native#text/plain
 packages/imagemagick/src/constitute.inc svneol=native#text/plain
 packages/imagemagick/src/constitute.inc svneol=native#text/plain

BIN
packages/imagemagick/examples/image.png


+ 1 - 0
packages/imagemagick/examples/wanddemo.lpr

@@ -28,6 +28,7 @@ end;
 var
 var
   status: MagickBooleanType;
   status: MagickBooleanType;
   wand: PMagickWand;
   wand: PMagickWand;
+
 begin
 begin
   { Read an image. }
   { Read an image. }
 
 

+ 84 - 0
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.
+

+ 66 - 0
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);}
+

+ 11 - 2
packages/imagemagick/src/imagemagick.pas

@@ -14,7 +14,8 @@
   limitations under the License.
   limitations under the License.
 
 
   ImageMagick Application Programming Interface declarations.
   ImageMagick Application Programming Interface declarations.
-  
+}
+{
   Converted from c by: Felipe Monteiro de Carvalho Dez/2005
   Converted from c by: Felipe Monteiro de Carvalho Dez/2005
 
 
 	Bug-fixed by Ángel Eduardo García Hernández
 	Bug-fixed by Ángel Eduardo García Hernández
@@ -34,10 +35,18 @@ uses SysUtils, ctypes;
 
 
 {$PACKENUM 4}
 {$PACKENUM 4}
 
 
+// Fix to compile in older FPC versions
+{$ifdef VER2_2}
+type
+  Pcsize_t = ^size_t;
+{$endif}
+
 const
 const
 {$ifdef Win32}
 {$ifdef Win32}
+  MagickExport = 'CORE_RL_magick_.dll';
   WandExport = 'CORE_RL_wand_.dll';
   WandExport = 'CORE_RL_wand_.dll';
 {$else}
 {$else}
+  MagickExport = 'libMagickCore';
   WandExport = 'libWand';
   WandExport = 'libWand';
 {$endif}
 {$endif}
 
 
@@ -50,7 +59,7 @@ const
 {#$include annotate.inc}
 {#$include annotate.inc}
 {#$include attribute.inc}
 {#$include attribute.inc}
 {#$include blob.inc}
 {#$include blob.inc}
-{#$include cache.inc}
+{$include cache.inc}
 {$include cache_view.inc}
 {$include cache_view.inc}
 {#include "magick/coder.h"
 {#include "magick/coder.h"
 #include "magick/client.h"
 #include "magick/client.h"

+ 4 - 1
packages/imagemagick/src/magick_wand.pas

@@ -14,7 +14,10 @@
   limitations under the License.
   limitations under the License.
 
 
   ImageMagick MagickWand API.
   ImageMagick MagickWand API.
-  
+}
+{
+  Based on ImageMagick 6.2
+
   Converted from c by: Felipe Monteiro de Carvalho Dez/2005
   Converted from c by: Felipe Monteiro de Carvalho Dez/2005
 
 
 	Bug-fixed by Ángel Eduardo García Hernández
 	Bug-fixed by Ángel Eduardo García Hernández

+ 2 - 0
packages/imagemagick/src/pixel.inc

@@ -54,6 +54,8 @@ type
 
 
 type
 type
   MagickPixelPacket = record
   MagickPixelPacket = record
+    storage_class: ClassType; // Added after 6.2
+
     colorspace: ColorspaceType;
     colorspace: ColorspaceType;
 
 
     matte: MagickBooleanType;
     matte: MagickBooleanType;

+ 7 - 1
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;
 function PixelGetColorCount(const wand: PPixelWand): culong; cdecl; external WandExport;
 
 
 procedure ClearPixelWand(wand: PPixelWand); 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 PixelGetQuantumColor(const wand: PPixelWand; color: PPixelPacket); cdecl; external WandExport;
 procedure PixelSetAlpha(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetAlpha(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetAlphaQuantum(wand: PPixelWand; const opacity: Quantum); 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 PixelSetBlackQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
 procedure PixelSetBlue(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetBlue(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetBlueQuantum(wand: PPixelWand; const opacity: Quantum); 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 PixelSetColorCount(wand: PPixelWand; const count: culong); cdecl; external WandExport;
 procedure PixelSetCyan(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetCyan(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetCyanQuantum(wand: PPixelWand; const opacity: Quantum); 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 PixelSetGreen(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetGreenQuantum(wand: PPixelWand; const opacity: Quantum); 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 PixelSetIndex(wand: PPixelWand; const index: IndexPacket); cdecl; external WandExport;
 procedure PixelSetMagenta(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetMagenta(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetMagentaQuantum(wand: PPixelWand; const opacity: Quantum); 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 PixelSetOpacity(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetOpacityQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
 procedure PixelSetOpacityQuantum(wand: PPixelWand; const opacity: Quantum); cdecl; external WandExport;
 procedure PixelSetQuantumColor(wand: PPixelWand; const color: PPixelPacket); 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 PixelSetYellow(wand: PPixelWand; const opacity: Double); cdecl; external WandExport;
 procedure PixelSetYellowQuantum(wand: PPixelWand; const opacity: Quantum); 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;