Difference between revisions of "PascalMagick"
Sekelsenmat (talk | contribs) |
|||
Line 192: | Line 192: | ||
Best regards, Arcnor | Best regards, Arcnor | ||
+ | |||
+ | : Hello, you can send it to me, and I´ll apply the changes. My e-mail is felipemonteiro.carvalho@gmail.com By the way, did you correct bugs 2 and 3 also? thanks a lot --[[User:Sekelsenmat|Sekelsenmat]] 05:07, 8 June 2006 (CEST) | ||
===Change Log=== | ===Change Log=== |
Revision as of 05:07, 8 June 2006
About
About ImageMagick
ImageMagick is a free software suite developed to create, edit, and compose bitmap images. It supports a huge variety of formats (over 90) including formats like GIF, JPEG, JPEG-2000, PNG, PDF, PhotoCD, TIFF, and DPX. Images can be cropped, colors can be changed, various effects can be applied, images can be rotated and combined, and text, lines, polygons, ellipses and Bézier curves can be added to images and stretched and rotated.
The suite runs on all major operating systems and it can also be used from the command line and it´s command line tools package is one of Linux standard packages, being distributed with many distributions.
Features and Capabilities:
- Convert an image from one format to another (e.g. PNG to JPEG)
- Resize, rotate, sharpen, color reduce, or add special effects to an image
- Create a montage of image thumbnails
- Create a transparent image suitable for use on the Web
- Turn a group of images into a GIF animation sequence
- Create a composite image by combining several separate image
- Draw shapes or text on an image
- Decorate an image with a border or frame
- Describe the format and characteristics of an image
ImageMagick Book
ImageMagick Tricks This fast paced and practical tutorial is packed with examples of photo manipulations, logo creation, animations, and complete web projects. With this book up your sleeve, you'll be creating spellbinding images from code in no time
About MagickWand
The MagickWand API is the recommended interface by the ImageMagick team. It is an easy to use programming interface for using the suite.
About MagickCore
The MagickCore API is a low-level interface for ImageMagick.
About PascalMagick
This port is a translation of the c header files for both MagickWand and Magick Core.
Screenshot
Author
License
BSD-style and compatible with the GPL.
You can read the Licence here.
Download
PascalMagick 0.3 is available here: http://sourceforge.net/project/showfiles.php?group_id=92177&package_id=174103
Status: Magick Wand headers are complete and working on both Windows and Linux.
Installation
The current version of PascalMagick works on Windows and Linux. Beta testers are necessary for the Mac OS X version.
To start with, install ImageMagick binaries from the official website: http://www.imagemagick.org/script/binary-releases.php
Now download and unzip PascalMagick package (Instructions on the Download section above).
To check that everything is working, open the PascalMagick/wand/wanddemo.lpi project. Now go to the Project --> "Compiler Options dialog" and change the "Other Units" field to point to "../magick", so it can find the PascalMagick/magick/ImageMagick.pas file. After this you can compile and run the test program.
If the program is working, it will load the image.png image located on the same directory as he is, resize it and then save it as a jpg called image.jpg.
One Extra step is necessary on Linux: Rename the image.PNG to image.png due to case issues.
Demonstration program 1
{ Demonstration program for the ImageMagick Library This program was converted from c by: Felipe Monteiro de Carvalho Usage: Just execute the program. It will resize the image.png image on it´s directory to fit (106, 80) and convert it to a jpg. Dez/2005 } {Version 0.1} program wanddemo; {$mode objfpc}{$H+} uses SysUtils, magick_wand, ImageMagick; 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; begin { Read an image. } MagickWandGenesis; wand := NewMagickWand; try status := MagickReadImage(wand, 'image.png'); if (status = MagickFalse) then ThrowWandException(wand); { Turn the images into a thumbnail sequence. } MagickResetIterator(wand); while (MagickNextImage(wand) <> MagickFalse) do MagickResizeImage(wand, 106, 80, LanczosFilter, 1.0); { Write the image as MIFF and destroy it. } status := MagickWriteImages(wand, 'image.jpg', MagickTrue); if (status = MagickFalse) then ThrowWandException(wand); finally wand := DestroyMagickWand(wand); MagickWandTerminus; end; end.
CVS
Not yet available.
Bug Reporting/Feature Request
Tests are necessary to verify if the bindings work with all versions of ImageMagick.
You can post Bug Reports / Feature Requests here:
Bug 1
There is an error in pixel_iterator.inc The correct declaration is function NewPixelIterator(wand: PMagickWand): PPixelIterator; cdecl; external WandExport;
also the following declarations should be added function PixelGetNextIteratorRow(iterator: PPixeliterator; var wandCount : Cardinal) : PPPixelWand; cdecl; external WandExport;
function PixelGetPreviousIteratorRow(iterator: PPixeliterator; var wandCount : Cardinal) : PPPixelWand; cdecl; external WandExport;
Cheers, Todd.
Status: Fixed on 0.3
Bug 2
There is a problem in "magick_wand.pas" and "ImageMagick.pas": the compiler option "{$PACKRECORDS C}" must be in the "{$ifdef FPC}[...]{$endif}". Otherwise the units do not compile with Delphi (Delphi 7 in my case).
Best wishes, Marc Geldon (PRO IT SYSTEMS)
Bug 3
your definition of "MagickGetImagePage" in magick_image.inc:
function MagickGetImagePage(wand: PMagickWand; width, height: PCardinal; x, y: Integer): MagickBooleanType; cdecl; external WandExport;
correct definition (x and y are "PInteger"!):
function MagickGetImagePage(wand: PMagickWand; width, height: PCardinal; x, y: PInteger): MagickBooleanType; cdecl; external WandExport;
Best wishes, Marc Geldon (PRO IT SYSTEMS)
Bug 4
ImageMagick 6.2.7 (don't know exactly what version) introduced a few changes in MagickWand record and others. Also, a few variable definitions were incorrectly declared, and some function imports missed the "cdecl", so they didn't work (like NewMagickWand()). I've fixed all this issues. Can I upload the changes somewhere?
Best regards, Arcnor
- Hello, you can send it to me, and I´ll apply the changes. My e-mail is felipemonteiro.carvalho@gmail.com By the way, did you correct bugs 2 and 3 also? thanks a lot --Sekelsenmat 05:07, 8 June 2006 (CEST)
Change Log
- 14.12.05 Began working on a pascal port for the c headers
- 27.12.05 PascalMagick version 0.1 released
- About 80% of the MagickWand API is translated
- The basic demonstration program is working well
- Only the very minimum necessary MagickCode headers were translated
- 10.04.06 PascalMagick version 0.2 released
- MagickWand API fully translated
- Added a second demonstration program
- 24.05.06 PascalMagick version 0.3 released
- Minor fixes on the bindings
Help
Please send help requests to the Lazarus Forum or the Lazarus mailling list.