unit Unit1; interface {$WARN UNIT_PLATFORM OFF} uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math, hyieutils, hyiedefs, StdCtrls, ieview, imageenview, imageenproc, iexBitmaps, FileCtrl, StrUtils, ExtCtrls, Buttons, imageenio, ComCtrls; type TMainForm = class(TForm) ImageEnView1: TImageEnView; Panel1: TPanel; FileListBox1: TFileListBox; Label1: TLabel; TrackBar1: TTrackBar; Panel2: TPanel; ImageEnView2: TImageEnView; SpeedButton1: TSpeedButton; Memo3: TMemo; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; LabelCamHead: TLabel; LabelCamPitch: TLabel; RadioGroupQuality: TRadioGroup; lblGetMore: TLabel; procedure ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FileListBox1Change(Sender: TObject); procedure TrackBar1Change(Sender: TObject); procedure FormResize(Sender: TObject); procedure SpeedButton1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure lblGetMoreClick(Sender: TObject); procedure RadioGroupQualityClick(Sender: TObject); private { Private declarations } m_downx: integer; m_downy: integer; public { Public declarations } end; var MainForm: TMainForm; implementation uses ShellAPI; {$R *.dfm} {$R WindowsTheme.res} procedure TMainForm.FormActivate(Sender: TObject); begin FileListBox1.Selected[0] := true; FileListBox1Change(self); end; procedure TMainForm.FileListBox1Change(Sender: TObject); begin if trim(filelistbox1.FileName) = '' then exit; ImageEnView2.IO.LoadFromFile(filelistbox1.FileName); ImageEnView1.LegacyBitmap := false; ImageEnView1.IEBitmap.VirtualBitmapProvider := TIEEquirectangularRenderer.Create(ImageEnView2); ImageEnView1.Update(); // Are all the demo images available? lblGetMore.Visible := filelistbox1.Items.Count < 5; end; procedure TMainForm.ImageEnView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin m_downx := X; m_downy := Y; end; procedure TMainForm.ImageEnView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ssLeft in Shift then begin with (ImageEnView1.IEBitmap.VirtualBitmapProvider as TIEEquirectangularRenderer) do begin CamHeading := CamHeading - (- X/5 + m_downx/5); CamPitch := CamPitch + 0.5 * (- Y/5 + m_downy/5); CamPitch := dmin(180, dmax(0, CamPitch)); LabelCamHead.Caption := FloatToStr(CamHeading) + '°'; LabelCamPitch.Caption := FloatToStr(CamPitch) + '°' end; m_downx := X; m_downy := Y; ImageEnView1.Update(); end; end; procedure TMainForm.TrackBar1Change(Sender: TObject); begin with (ImageEnView1.IEBitmap.VirtualBitmapProvider as TIEEquirectangularRenderer) do CamFov := trackbar1.Position; ImageEnView1.Update; end; procedure TMainForm.FormResize(Sender: TObject); begin ImageEnView1.IEBitmap.Resize(ImageEnView1.Width, ImageEnView1.Height); ImageEnView1.Update; end; procedure TMainForm.lblGetMoreClick(Sender: TObject); begin ShellExecute(Handle, 'open', PChar('http://www.imageen.com/files/Other/PhotoSpherePix.zip'), nil, nil, SW_MAXIMIZE); end; // test fps procedure TMainForm.SpeedButton1Click(Sender: TObject); var t1, t2: dword; c: integer; begin c := 0; t1 := GetTickCount(); while SpeedButton1.Down do begin with (ImageEnView1.IEBitmap.VirtualBitmapProvider as TIEEquirectangularRenderer) do begin CamHeading := CamHeading + 0.5; LabelCamHead.Caption := FloatToStr(CamHeading); end; ImageEnView1.Update; Application.ProcessMessages(); t2 := GetTickCount() + 1; inc(c); Memo3.Lines.Add( Format('%3.1f FPS', [c / ((t2 - t1) / 1000)]) ); end; end; procedure TMainForm.RadioGroupQualityClick(Sender: TObject); begin with (ImageEnView1.IEBitmap.VirtualBitmapProvider as TIEEquirectangularRenderer) do case RadioGroupQuality.ItemIndex of 0: Quality := ierqLow; 1: Quality := ierqHigh; end; ImageEnView1.Update(); end; end.