unit umain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ieview, ImageEnView, hyiedefs, hyieutils, iexBitmaps, iesettings, iexLayers, iexRulers; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; Label2: TLabel; ImageEnView1: TImageEnView; ImageEnView2: TImageEnView; Button2: TButton; Button3: TButton; GroupBox1: TGroupBox; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; Button4: TButton; GroupBox2: TGroupBox; Label15: TLabel; Label16: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation uses ImageEnProc; {$R *.DFM} {$R WindowsTheme.res} // compare (using ComputeImageEquality) procedure TForm1.Button1Click(Sender: TObject); var psnr_min, psnr_max: double; mse_min, mse_max: double; rmse_min, rmse_max: double; pae_min, pae_max: double; mae_min, mae_max: double; equal: boolean; ww, hh: integer; begin // adjust sizes (make ImageEnView1=ImageEnView2) ww := ImageEnView1.IEBitmap.Width; hh := ImageEnView1.IEBitmap.Height; if (ww <> ImageEnView2.IEBitmap.Width) or (hh <> ImageEnView2.IEBitmap.Height) then ImageEnView2.Proc.Resample(ww, hh, rfNone); // equal := ImageEnView1.Proc.ComputeImageEquality(ImageEnView2.IEBitmap, psnr_min, psnr_max, mse_min, mse_max, rmse_min, rmse_max, pae_min, pae_max, mae_min, mae_max); label4.caption := IEFloatToFormatString(psnr_min, 2, True) + ' (min) , ' + IEFloatToFormatString(psnr_max, 2, True) + ' (max)'; label6.caption := IEFloatToFormatString(mse_min, 2, True) + ' (min) , ' + IEFloatToFormatString(mse_max, 2, True) + ' (max)'; label8.caption := IEFloatToFormatString(rmse_min, 2, True) + ' (min) , ' + IEFloatToFormatString(rmse_max, 2, True) + ' (max)'; label10.caption := IEFloatToFormatString(pae_min, 2, True) + ' (min) , ' + IEFloatToFormatString(pae_max, 2, True) + ' (max)'; label12.caption := IEFloatToFormatString(mae_min, 2, True) + ' (min) , ' + IEFloatToFormatString(mae_max, 2, True) + ' (max)'; if equal then label14.caption := 'True' else label14.caption := 'False'; end; // compare using CompareWith procedure TForm1.Button4Click(Sender: TObject); var ww, hh: integer; v: double; begin // adjust sizes (make ImageEnView1=ImageEnView2) ww := ImageEnView1.IEBitmap.Width; hh := ImageEnView1.IEBitmap.Height; if (ww <> ImageEnView2.IEBitmap.Width) or (hh <> ImageEnView2.IEBitmap.Height) then ImageEnView2.Proc.Resample(ww, hh, rfNone); // v := ImageEnView1.Proc.CompareWith(ImageEnView2.IEBitmap, nil); label16.Caption := IEFloatToFormatString(v * 100, 2, True) + ' %'; end; // Open A B procedure TForm1.Button2Click(Sender: TObject); begin with ImageEnView1.IO do LoadFromFile(ExecuteOpenDialog('', '', false, 1, '')); Label1.caption := 'Image A (' + ImageEnView1.IEBitmap.getHash() + ')'; end; // Open B procedure TForm1.Button3Click(Sender: TObject); begin with ImageEnView2.IO do LoadFromFile(ExecuteOpenDialog('', '', false, 1, '')); Label2.caption := 'Image B (' + ImageEnView2.IEBitmap.getHash() + ')'; end; end.