BSOne.SFC/EM.Lib/ImageEn_SRC/Demos/Other/PhotoSphere/Unit1.pas

170 lines
4.2 KiB
Plaintext
Raw Blame History

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) + '<27>';
LabelCamPitch.Caption := FloatToStr(CamPitch) + '<27>'
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.