Chapter 28: Image Processing


In this chapter, you'll see how to implement several simple effects like converting an image to grayscale and inverting colors using the TCanvas.Pixels and TBitmap.ScanLine properties. You'll also learn how to create an extremely useful TImageList descendant that can generate disabled glyphs at run time, thus saving development time since you won't need to find or create disabled glyphs that match the normal glyph. Even better, using this component reduces the size of the executable significantly since you won't have to add disabled glyphs to the form at design time.

Before we can start writing the graphics related code, we have to create a new VCL Forms application and write a small amount of utility code for opening and displaying bitmaps on the form. The following figure shows the test application at run time.

image from book
Figure 28-1: The test application

To enable us to easily test various effects, this application does the following:

  • Creates a TBitmap instance in the OnCreate event handler

  • Releases the TBitmap instance from memory in the OnDestroy event handler

  • Uses the TOpenDialog component to enable us to select a bitmap

  • Draws the selected bitmap in the OnPaint event handler

Listing 28-1 shows everything required for the subsequent graphics code.

Listing 28-1: The utility code

image from book
unit Unit1; interface uses   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,   Dialogs, Menus; type   TMainForm = class(TForm)   private     { Private declarations }     FImage: TBitmap;   public     { Public declarations }   end; var   MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.FileExitClick(Sender: TObject); begin   Close; end; procedure TMainForm.FormCreate(Sender: TObject); begin   FImage := TBitmap.Create;   { if your resolution is high enough, resize the form to     display the entire 800x600 flower.bmp image that comes     with this example }   if Screen.Width >= 1024 then   begin     ClientWidth := 800;     ClientHeight := 600;   end; end; procedure TMainForm.FormDestroy(Sender: TObject); begin   FImage.Free; end; procedure TMainForm.FormPaint(Sender: TObject); begin   if OpenDialog.FileName <> '' then     Canvas.Draw(0, 0, FImage); end; procedure TMainForm.FileOpenClick(Sender: TObject); begin   if OpenDialog.Execute then   begin     FImage.LoadFromFile(OpenDialog.FileName);     Invalidate; { Display the image }   end; end; end.
image from book

Inside Delphi 2006
Inside Delphi 2006 (Wordware Delphi Developers Library)
ISBN: 1598220039
EAN: 2147483647
Year: 2004
Pages: 212
Authors: Ivan Hladni

Similar book on Amazon © 2008-2017.
If you may any questions please contact us: