BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/ImageAnalysis/Palette/umain.pas

158 lines
4.5 KiB
Plaintext

unit umain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ieview, imageenview, StdCtrls, iemview, ExtCtrls, imageenproc, iexBitmaps,
hyieutils, hyiedefs, iesettings, iexColorPalette, Contnrs, Buttons, ComCtrls,
iexLayers, iexRulers;
type
TMainForm = class(TForm)
ImageEnView1: TImageEnView;
IEColorPalette1: TIEColorPalette;
ColorDialog1: TColorDialog;
Timer1: TTimer;
Splitter1: TSplitter;
Panel1: TPanel;
btnLoadImage: TButton;
btnAnimatePalette: TSpeedButton;
Label1: TLabel;
pnlCursorColor: TPanel;
Label2: TLabel;
pnlSelectedColor: TPanel;
Label6: TLabel;
cmbStyle: TComboBox;
Label7: TLabel;
updCellSize: TUpDown;
btnSetColor: TButton;
procedure FormCreate(Sender: TObject);
procedure btnLoadImageClick(Sender: TObject);
procedure ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure btnAnimatePaletteClick(Sender: TObject);
procedure btnSetColorClick(Sender: TObject);
procedure cmbStyleChange(Sender: TObject);
procedure IEColorPalette1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure IEColorPalette1SelectedColorChange(Sender: TObject);
procedure ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure Timer1Timer(Sender: TObject);
procedure updCellSizeChanging(Sender: TObject; var AllowChange: Boolean);
private
{ Private declarations }
public
{ Public declarations }
procedure ShowPalette;
end;
var
MainForm: TMainForm;
implementation
{$R *.DFM}
{$R WindowsTheme.res}
procedure TMainForm.FormCreate(Sender: TObject);
begin
// So index of palette matches that of the image
IEColorPalette1.SortMethod := iesmNone;
cmbStyle.ItemIndex := 0;
pnlCursorColor .ParentBackground := False;
pnlSelectedColor.ParentBackground := False;
end;
// fills IEColorPalette1 with the palette
procedure TMainForm.ShowPalette;
begin
IEColorPalette1.AssignPalette( ImageEnView1 );
end;
procedure TMainForm.btnLoadImageClick(Sender: TObject);
begin
// Don't use Windows Bitmaps
ImageEnView1.LegacyBitmap := False;
// Load images in native format
ImageEnView1.IO.NativePixelFormat := true;
with ImageEnView1.IO do
LoadFromFileAuto( ExecuteOpenDialog());
// if the bitmap is not 8 bit paletted then convert it
if ImageEnView1.IEBitmap.PixelFormat <> ie8p then
ImageEnView1.IEBitmap.PixelFormat := ie8p;
ShowPalette;
end;
procedure TMainForm.ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
IEColorPalette1.SelectedColor := TRGB2TColor( ImageEnView1.IEBitmap.Pixels[ ImageEnView1.XScr2Bmp( X ), ImageEnView1.YScr2Bmp( Y ) ]);
end;
// animate palette test
procedure TMainForm.btnAnimatePaletteClick(Sender: TObject);
begin
Timer1.Enabled := btnAnimatePalette.Down;
ShowPalette;
end;
procedure TMainForm.btnSetColorClick(Sender: TObject);
var
selIndex: Integer;
begin
selIndex := IEColorPalette1.SelectedIndex;
if selIndex > -1 then
begin
ColorDialog1.Color := TRGB2TColor( ImageEnView1.IEBitmap.Palette[ selIndex ]);
if ColorDialog1.Execute then
begin
ImageEnView1.IEBitmap.Palette[ selIndex ] := TColor2TRGB( ColorDialog1.Color );
IEColorPalette1.SelectedIndex := selIndex;
ImageEnView1.Update;
ShowPalette;
end;
end;
end;
procedure TMainForm.cmbStyleChange(Sender: TObject);
begin
IEColorPalette1.CellStyle := TIECellStyle( cmbStyle.ItemIndex );
end;
procedure TMainForm.IEColorPalette1MouseMove(Sender: TObject; Shift:
TShiftState; X, Y: Integer);
begin
pnlCursorColor.color := IEColorPalette1.ColorUnderCursor;
end;
procedure TMainForm.IEColorPalette1SelectedColorChange(Sender: TObject);
begin
pnlSelectedColor.color := IEColorPalette1.SelectedColor;
end;
procedure TMainForm.ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
pnlCursorColor.color := TRGB2TColor( ImageEnView1.IEBitmap.Pixels[ ImageEnView1.XScr2Bmp( X ), ImageEnView1.YScr2Bmp( Y ) ]);
end;
// animate palette test - running
procedure TMainForm.Timer1Timer(Sender: TObject);
var
i: integer;
begin
for i := 0 to 255 do
ImageEnView1.IEBitmap.Palette[i] := CreateRGB(random(256),random(256),random(256));
ImageEnView1.Update;
end;
procedure TMainForm.updCellSizeChanging(Sender: TObject; var AllowChange: Boolean);
begin
IEColorPalette1.CellSize := abs( updCellSize.Position );
end;
end.