From e03da98d5dd152e4526a79fb18c72f3099ce256c Mon Sep 17 00:00:00 2001 From: ronaldhordijk Date: Sat, 23 Jul 2005 09:19:11 +0000 Subject: [PATCH] screensaver --- 2.10/Project/delphi6/FlameSS.cfg | 41 +++ 2.10/Project/delphi6/FlameSS.dof | 108 ++++++++ 2.10/Project/delphi6/FlameSS.dpr | 214 +++++++++++++++ 2.10/Project/delphi6/FlameSS.dsk | 280 +++++++++++++++++++ 2.10/Project/delphi6/FlameSS.res | Bin 0 -> 876 bytes 2.10/ScreenSaver/FlameIO.pas | 146 ++++++++++ 2.10/ScreenSaver/ScrConfig.dfm | 163 ++++++++++++ 2.10/ScreenSaver/ScrConfig.pas | 181 +++++++++++++ 2.10/ScreenSaver/ScrMain.dfm | 25 ++ 2.10/ScreenSaver/ScrMain.pas | 444 +++++++++++++++++++++++++++++++ 10 files changed, 1602 insertions(+) create mode 100644 2.10/Project/delphi6/FlameSS.cfg create mode 100644 2.10/Project/delphi6/FlameSS.dof create mode 100644 2.10/Project/delphi6/FlameSS.dpr create mode 100644 2.10/Project/delphi6/FlameSS.dsk create mode 100644 2.10/Project/delphi6/FlameSS.res create mode 100644 2.10/ScreenSaver/FlameIO.pas create mode 100644 2.10/ScreenSaver/ScrConfig.dfm create mode 100644 2.10/ScreenSaver/ScrConfig.pas create mode 100644 2.10/ScreenSaver/ScrMain.dfm create mode 100644 2.10/ScreenSaver/ScrMain.pas diff --git a/2.10/Project/delphi6/FlameSS.cfg b/2.10/Project/delphi6/FlameSS.cfg new file mode 100644 index 0000000..619a827 --- /dev/null +++ b/2.10/Project/delphi6/FlameSS.cfg @@ -0,0 +1,41 @@ +-$A8 +-$B- +-$C- +-$D- +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L- +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$Y- +-$Z1 +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-E"../../out" +-N"../../out/dcu" +-LE"x:\programs\borland\delphi6\Projects\Bpl" +-LN"x:\programs\borland\delphi6\Projects\Bpl" +-U"../../source" +-O"../../source" +-I"../../source" +-R"../../source" diff --git a/2.10/Project/delphi6/FlameSS.dof b/2.10/Project/delphi6/FlameSS.dof new file mode 100644 index 0000000..437106a --- /dev/null +++ b/2.10/Project/delphi6/FlameSS.dof @@ -0,0 +1,108 @@ +[FileVersion] +Version=6.0 +[Compiler] +A=8 +B=0 +C=0 +D=0 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=0 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=0 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir=../../out +UnitOutputDir=../../out/dcu +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=../../source +Packages=vcl;rtl;dbrtl;adortl;vcldb;vclx;bdertl;vcldbx;ibxpress;dsnap;cds;bdecds;qrpt;teeui;teedb;tee;dss;teeqr;visualclx;visualdbclx;dsnapcrba;dsnapcon;VclSmp;vclie;xmlrtl;inet;inetdbbde;inetdbxpress;inetdb;nmfast;webdsnap;websnap;dbexpress;dbxcds;indy;dclOffice2k;FlatStyle_D6;rae;S303_R60;S303BR60;dxmdsd6;dxForumLibD6;RzLPDB60;RzLPND60;B301vr60;B301cr60;o401_r60;o401br60;vclshlctrls;LTEffects;B301_r60;gllib +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir=X:\Code\Delphi\Apophysis\2.02h\ScreenSaver\ +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1033 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +[Excluded Packages] +W:\Lib\O403_d60.bpl=TurboPower Orpheus 4.03 Components - VCL60 +W:\Lib\S303_d60.bpl=SysTools 3 Components +W:\Lib\dgmr_60.bpl=Dgmr bibliotheek 6.1 +c:\proj32\gl\out\gllib.bpl=GL bibliotheek +x:\programs\borland\delphi6\Projects\Bpl\dclusr60.bpl=Borland User Components +C:\Program Files\Indy 10 for Delphi 6\LibD6\dclIndyCore60.bpl=Indy 10 Core Design Time +C:\Program Files\Indy 10 for Delphi 6\LibD6\dclIndyProtocols60.bpl=Indy 10 Protocols Design Time +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=2 +Item0=../../source +Item1=../../src +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=../../out/dcu +[HistoryLists\hlOutputDirectorry] +Count=1 +Item0=../../out diff --git a/2.10/Project/delphi6/FlameSS.dpr b/2.10/Project/delphi6/FlameSS.dpr new file mode 100644 index 0000000..40fad48 --- /dev/null +++ b/2.10/Project/delphi6/FlameSS.dpr @@ -0,0 +1,214 @@ +program FlameSS; + +uses + Forms, + Dialogs, + SysUtils, + Render, + controlpoint, + windows, + graphics, + messages, + ScrConfig in '..\..\ScreenSaver\ScrConfig.pas' {frmConfig}, + ScrMain in '..\..\ScreenSaver\ScrMain.pas' {frmMain}, + FlameIO in '..\..\ScreenSaver\FlameIO.pas'; + +{$E SCR} + +{$R *.res} + +type TSSMode = (ssSetPwd,ssPreview,ssConfig,ssRun); + +var + MySem: THandle; + +function GetScreenSaverMode: TSSMode; +var + ParamChar: Char; +begin + Result := ssRun; + if ParamCount = 0 then + Exit; + + if Length(ParamStr(1)) = 1 then + ParamChar := ParamStr(1)[1] + else + ParamChar := ParamStr(1)[2]; + + Case ParamChar of + 'A', 'a': + Result := ssSetPwd; + 'P', 'p': + Result := ssPreview; + 'C', 'c': + Result := ssConfig; + else + Result := ssRun; + end; +end; + +procedure SetPassWord; +var + SysDir: string; + NewLen: integer; + MyMod: THandle; + PwdFunc: function (a : PChar; ParentHandle : THandle; b, c : Integer) : + Integer; stdcall; +begin + SetLength(SysDir,MAX_PATH); + NewLen := GetSystemDirectory(PChar(SysDir),MAX_PATH); + SetLength(SysDir,NewLen); + + MyMod := LoadLibrary(PChar(IncludeTrailingPathDelimiter(SysDir) + 'MPR.DLL')); + if MyMod <> 0 then begin + PwdFunc := GetProcAddress(MyMod,'PwdChangePasswordA'); + if Assigned(PwdFunc) then + PwdFunc('SCRSAVE',StrToInt(paramstr(2)),0,0); + FreeLibrary(MyMod); + end; +end; + +function WindowProc(Wnd: HWnd; Msg: Integer; wParam: Word; lParam: Integer): Integer; far; stdcall; +begin + + { Window procedure for the saver preview. Only used for terminating the preview + version of the saver. } + if (Msg = WM_DESTROY) or (Msg = WM_CLOSE) then PostMessage(Wnd, WM_QUIT, 0, 0); + Result := DefWindowProc(Wnd, Msg, wParam, lParam); + +end; + +procedure Preview; +var + PreviewCanvas: TCanvas; + PreviewRect: TRect; + WndClass: TWndClass; + DC: hDC; + MyWnd: hWnd; + Msg: TMsg; + ParentHandle: THandle; + cp : TControlPoint; + Render: TRenderer; + bm: TBitmap; +begin + { To run the preview, you need to create a window class corresponding with the + little display in the screensaver control panel. This doesn't look very + elegant in a Delphi project, but I don't think you can use VCL functionality + to do this... } + with WndClass do + begin + style := CS_PARENTDC; + lpfnWndProc := @WindowProc; + cbClsExtra := 0; + cbWndExtra := 0; + hIcon := 0; + hCursor := 0; + hbrBackground := 0; + lpszMenuName := nil; + lpszClassName := 'DeskSpin'; + end; + WndClass.hInstance := hInstance; + Windows.RegisterClass(WndClass); + + ParentHandle := StrToInt(ParamStr(2)); + + // Initialize a Rect that matches the preview area: + GetWindowRect(Parenthandle, PreviewRect); + PreviewRect.Right := PreviewRect.Right - PreviewRect.Left; + PreviewRect.Bottom := PreviewRect.Bottom - PreviewRect.Top; + PreviewRect.Left := 0; + PreviewRect.Top := 0; + + // Instantiate the window class so we can draw to the preview area: + MyWnd := CreateWindow('DeskSpin', 'DeskSpin', + WS_CHILD or WS_DISABLED or WS_VISIBLE, 0, 0, + PreviewRect.Right, PreviewRect.Bottom, ParentHandle, + 0, hInstance, nil); + + // We need a DC before we can draw: + DC := GetDC(MyWnd); + { We can create a TCanvas matching the DC, so we can draw the preview with + familiar functions: } + PreviewCanvas := TCanvas.Create; + PreviewCanvas.Handle := DC; + + randomize; + cp := TControlPoint.Create; + Render := TRenderer.Create; + + cp.ParseString('pixels_per_unit 277.456647 center -1.0982659 0 gamma 2 spatial_filter_radius' + + ' 0.5 contrast 1 brightness 1.5 zoom 0 spatial_oversample 1 sample_density 1 nbatches' + + ' 1 white_level 200 cmap_inter 0 time 0 cmap 33 xform 0 density 1 color 0 var 0 0 0 1 0' + + ' 0 0 coefs 0.466381997 -0.0618700013 0.0792416036 0.610638022 -0.475656986 -0.28115499'+ + ' xform 1 density 1 color 1 var 0 0 0 0 1 0 0 coefs -0.513867021 0.271649003 -0.254521996' + + ' -0.550984025 -0.674094975 -0.600323975'); + + cp.sample_density := 1; + cp.Width := PreviewRect.Right - PreviewRect.Left; + cp.Height := PreviewRect.Bottom - PreviewRect.Top; + cp.spatial_oversample := 2; + cp.spatial_filter_radius := 0.1; + cp.Gamma := 4; + cp.brightness := 4; + cp.CalcBoundbox; + Render.SetCP(cp); + Render.Render; + BM := Render.GetImage; + PreviewCanvas.Draw(0,0,bm); + + + { Enter a message loop to keep the preview going. I've kept the preview simple + (plain text output), but if you wanted, you could initialize OpenGL for the + DC you already have, and actually let your saver render to that. } + while GetMessage(Msg, 0, 0, 0) do + begin + PreviewCanvas.Draw(0,0,bm); + +// PreviewCanvas.FillRect(PreviewRect); +// PreviewCanvas.TextOut(5, 5, 'Your preview here.'); + TranslateMessage(Msg); + DispatchMessage(Msg); + end; + PreviewCanvas.Free; + + // Close and destroy the preview window: + CloseWindow(MyWnd); + DestroyWindow(MyWnd); + + Render.Free; + cp.Free; +end; + +begin + Case GetScreenSaverMode of + ssSetPwd: + begin + Application.Initialize; + SetPassWord; + end; + ssConfig: + begin + Application.Initialize; + Application.Title := 'Flame Screensaver'; + Application.CreateForm(TfrmConfig, frmConfig); + Application.Run; + end; + ssPreview: + Preview; + else // ssrun + // Test if screen save was already started + MySem := CreateSemaphore(nil,0,1,'ESDSaverSemaphore'); + if (MySem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS) then begin + CloseHandle(MySem); + Exit; + end; + + Application.Initialize; + Application.CreateForm(TfrmMain, frmMain); + Application.Run; + + if (MySem <> 0) then + CloseHandle(MySem); + end; // Case GetScreenSaverMode of + +end. diff --git a/2.10/Project/delphi6/FlameSS.dsk b/2.10/Project/delphi6/FlameSS.dsk new file mode 100644 index 0000000..f968def --- /dev/null +++ b/2.10/Project/delphi6/FlameSS.dsk @@ -0,0 +1,280 @@ +[Closed Files] +File_0=SourceModule,'C:\PROJ32\gl\src\catalog.pas',0,1,561,1,585,0,0 +File_1=SourceModule,'C:\PROJ32\gl\src\CatFilter.pas',0,1,57,24,71,0,0 +File_2=SourceModule,'C:\PROJ32\gl\src\FCatFilter.pas',0,1,1,1,12,0,0 +File_3=SourceModule,'C:\PROJ32\gl\src\glStrConst.pas',0,1,1,39,1,0,0 +File_4=SourceModule,'C:\PROJ32\gl\src\Project.pas',0,1,498,1,520,0,0 +File_5=SourceModule,'C:\PROJ32\gl\src\MainForm.pas',0,1,212,27,215,0,0 +File_6=SourceModule,'C:\PROJ32\gl\src\Material.pas',0,1,912,111,947,0,0 +File_7=SourceModule,'C:\PROJ32\gl\src\FArea.pas',0,1,202,111,219,0,0 +File_8=SourceModule,'C:\PROJ32\gl\src\FCatalog.pas',0,1,582,6,610,0,0 +File_9=SourceModule,'C:\PROJ32\gl\src\kierterm.pas',0,1,622,1,647,0,0 + +[Modules] +Module0=X:\Code\Delphi\Apophysis\2.02h\Project\delphi6\FlameSS.dpr +Count=1 +EditWindowCount=1 + +[X:\Code\Delphi\Apophysis\2.02h\Project\delphi6\FlameSS.dpr] +ModuleType=SourceModule +FormState=0 +FormOnTop=0 + +[X:\Programs\Borland\Delphi6\Projects\ProjectGroup1.bpg] +FormState=0 +FormOnTop=0 + +[EditWindow0] +ViewCount=1 +CurrentView=0 +View0=0 +CodeExplorer=CodeExplorer@EditWindow0 +MessageView=MessageView@EditWindow0 +Create=1 +Visible=1 +State=0 +Left=266 +Top=111 +Width=1016 +Height=880 +MaxLeft=-4 +MaxTop=108 +ClientWidth=1008 +ClientHeight=846 +LeftPanelSize=0 +RightPanelSize=0 +BottomPanelSize=52 +BottomPanelClients=MessageView@EditWindow0 +BottomPanelData=000004000000000000000000000000000000000000000000000100000000000000000B0000004D65737361676556696577FFFFFFFF + +[View0] +Module=X:\Code\Delphi\Apophysis\2.02h\Project\delphi6\FlameSS.dpr +CursorX=46 +CursorY=16 +TopLine=1 +LeftCol=1 + +[Watches] +Count=0 + +[Breakpoints] +Count=0 + +[AddressBreakpoints] +Count=0 + +[Main Window] +Create=1 +Visible=1 +State=0 +Left=0 +Top=0 +Width=1280 +Height=112 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1272 +ClientHeight=78 + +[ProjectManager] +Create=1 +Visible=1 +State=0 +Left=0 +Top=0 +Width=231 +Height=843 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=231 +ClientHeight=843 +TBDockHeight=305 +LRDockWidth=438 +Dockable=1 + +[CPUWindow] +Create=1 +Visible=0 +State=0 +Left=373 +Top=335 +Width=533 +Height=353 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=525 +ClientHeight=319 +DumpPane=79 +DisassemblyPane=187 +RegisterPane=231 +FlagPane=64 + +[AlignmentPalette] +Create=1 +Visible=0 +State=0 +Left=200 +Top=114 +Width=156 +Height=84 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=150 +ClientHeight=60 + +[PropertyInspector] +Create=1 +Visible=1 +State=0 +Left=0 +Top=0 +Width=231 +Height=843 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=231 +ClientHeight=843 +TBDockHeight=527 +LRDockWidth=190 +Dockable=1 +SplitPos=85 +ArrangeBy=Name +SelectedItem= +ExpandedItems= +HiddenCategories= + +[WatchWindow] +Create=1 +Visible=0 +State=0 +Left=232 +Top=872 +Width=1048 +Height=165 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1040 +ClientHeight=139 +TBDockHeight=149 +LRDockWidth=421 +Dockable=1 + +[CallStackWindow] +Create=1 +Visible=1 +State=0 +Left=0 +Top=0 +Width=231 +Height=843 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=231 +ClientHeight=843 +TBDockHeight=161 +LRDockWidth=294 +Dockable=1 + +[ObjectTree] +Create=1 +Visible=0 +State=0 +Left=0 +Top=112 +Width=190 +Height=350 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=182 +ClientHeight=324 +TBDockHeight=350 +LRDockWidth=190 +Dockable=1 + +[DebugLogView] +Create=1 +Visible=0 +State=0 +Left=232 +Top=872 +Width=1048 +Height=165 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1040 +ClientHeight=139 +TBDockHeight=291 +LRDockWidth=417 +Dockable=1 + +[LocalVarsWindow] +Create=1 +Visible=0 +State=0 +Left=27 +Top=127 +Width=194 +Height=891 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=186 +ClientHeight=865 +TBDockHeight=110 +LRDockWidth=421 +Dockable=1 + +[CodeExplorer@EditWindow0] +Create=1 +Visible=1 +State=0 +Left=0 +Top=0 +Width=231 +Height=843 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=231 +ClientHeight=843 +TBDockHeight=305 +LRDockWidth=140 +Dockable=1 + +[MessageView@EditWindow0] +Create=1 +Visible=1 +State=0 +Left=12 +Top=0 +Width=996 +Height=52 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=996 +ClientHeight=52 +TBDockHeight=52 +LRDockWidth=443 +Dockable=1 + +[DockHosts] +DockHostCount=1 + +[DockSite0] +DockSiteType=1 +Create=1 +Visible=1 +State=0 +Left=0 +Top=112 +Width=266 +Height=877 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=258 +ClientHeight=851 +TBDockHeight=451 +LRDockWidth=177 +Dockable=1 +TabPosition=2 +ActiveTab=Project Manager +TabDockClients=ProjectManager,CodeExplorer@EditWindow0,CallStackWindow,PropertyInspector + diff --git a/2.10/Project/delphi6/FlameSS.res b/2.10/Project/delphi6/FlameSS.res new file mode 100644 index 0000000000000000000000000000000000000000..e1bec2ca1f751405dab7906c76ead120a5e08841 GIT binary patch literal 876 zcmc&zJx<0j40ZVs-cThtKu1Q7073#W0GB|_nQCwCR&TjdkHg5;Z!<3msoGBrY*=;t z^PFd=l8J~qsC!YkJNZ1T_yILd#@hDkycXTS>7aMehDv(Go!@07!bjs+3{JSvk>+^@ zkcLRci@{muauP;HwtQ{G8M>aJ`#w zwBF(9Z?#v#3GlX_xXbDF;MMzo=Ncp2LftRvh3@H@UZD^423uvj7ik+B>bf>>McSf< Fz5$D}d^G?7 literal 0 HcmV?d00001 diff --git a/2.10/ScreenSaver/FlameIO.pas b/2.10/ScreenSaver/FlameIO.pas new file mode 100644 index 0000000..4374d13 --- /dev/null +++ b/2.10/ScreenSaver/FlameIO.pas @@ -0,0 +1,146 @@ +unit FlameIO; + +interface + +uses + Controlpoint; + +function FlameToXML(const cp1: TControlPoint; sheep: boolean; compact: boolean = false): string; + +implementation + +uses + Classes, SysUtils, xForm; + +function NumXForms(const cp: TControlPoint): integer; +var + i: integer; +begin + Result := NXFORMS; + for i := 0 to NXFORMS - 1 do begin + if cp.xform[i].density = 0 then + begin + Result := i; + Break; + end; + end; +end; + +function CleanXMLName(ident: string): string; +var + i: integer; +begin + for i := 0 to Length(ident) do + begin + if ident[i] = '*' then + ident[i] := '_' + else if ident[i] = '"' then + ident[i] := #39; + end; + Result := ident; +end; + + +function ColorToXmlCompact(cp1: TControlPoint): string; +var + i: integer; +begin + Result := ' '; +end; + + +function ColorToXml(cp1: TControlPoint): string; +var + i: integer; +begin + Result := ''; + for i := 0 to 255 do begin + Result := Result + ' ' + #13#10; + end; +end; + + +function FlameToXML(const cp1: TControlPoint; sheep: boolean; compact: boolean = false): string; +var + t, i, j: integer; + FileList: TStringList; + x, y, a, b, cc, d, e, f: double; + varlist, nick, url, pal, hue: string; +begin + FileList := TStringList.create; + x := cp1.center[0]; + y := cp1.center[1]; + pal := ''; hue := ''; + if sheep then + begin + pal := 'palette="' + IntToStr(cp1.cmapindex) + '" '; + hue := 'hue="' + format('%g', [cp1.hue_rotation]) + '" '; + end; +// if Trim(SheepNick) <> '' then nick := 'nick="' + Trim(SheepNick) + '"'; +// if Trim(SheepURL) <> '' then url := 'url="' + Trim(SheepURL) + '" '; + try + FileList.Add(''); + { Write transform parameters } + t := NumXForms(cp1); + for i := 0 to t - 1 do + begin + with cp1.xform[i] do + begin + a := c[0][0]; + b := c[1][0]; + cc := c[0][1]; + d := c[1][1]; + e := c[2][0]; + f := c[2][1]; + varlist := ''; + for j := 0 to NRVAR - 1 do + begin + if vars[j] <> 0 then + begin + varlist := varlist + varnames[j] + format('="%f" ', [vars[j]]); + end; + end; + FileList.Add(Format(' ', [a, cc, b, d, e, f])); + end; + end; + { Write palette data } + if not sheep then begin + if not compact then + FileList.Add(ColorToXml(cp1)); + FileList.Add(ColorToXmlcompact(cp1)); + end; + + FileList.Add(''); + result := FileList.text; + finally + FileList.free + end; +end; + +end. diff --git a/2.10/ScreenSaver/ScrConfig.dfm b/2.10/ScreenSaver/ScrConfig.dfm new file mode 100644 index 0000000..aae18de --- /dev/null +++ b/2.10/ScreenSaver/ScrConfig.dfm @@ -0,0 +1,163 @@ +object frmConfig: TfrmConfig + Left = 422 + Top = 262 + BorderStyle = bsToolWindow + Caption = 'Configure' + ClientHeight = 330 + ClientWidth = 201 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'MS Sans Serif' + Font.Style = [] + OldCreateOrder = False + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Panel2: TPanel + Left = 0 + Top = 299 + Width = 201 + Height = 31 + Align = alBottom + BevelOuter = bvLowered + TabOrder = 0 + object btnOk: TButton + Left = 40 + Top = 5 + Width = 75 + Height = 21 + Caption = '&Ok' + Default = True + ModalResult = 1 + TabOrder = 0 + OnClick = btnOkClick + end + object btnCancel: TButton + Left = 120 + Top = 5 + Width = 75 + Height = 21 + Cancel = True + Caption = '&Cancel' + ModalResult = 2 + TabOrder = 1 + OnClick = btnCancelClick + end + end + object Panel3: TPanel + Left = 0 + Top = 200 + Width = 201 + Height = 99 + Align = alBottom + BevelOuter = bvLowered + TabOrder = 1 + object Label1: TLabel + Left = 8 + Top = 10 + Width = 92 + Height = 13 + Caption = 'Oversample <1 - 3>' + end + object Label2: TLabel + Left = 8 + Top = 30 + Width = 76 + Height = 13 + Caption = 'Filter <0.2 - 2.0>' + end + object Label3: TLabel + Left = 8 + Top = 50 + Width = 62 + Height = 13 + Caption = 'Filter in pixels' + end + object Label4: TLabel + Left = 8 + Top = 70 + Width = 71 + Height = 13 + Caption = 'Sample density' + end + object edtOversample: TEdit + Left = 152 + Top = 8 + Width = 41 + Height = 21 + TabOrder = 0 + Text = '1' + OnExit = edtOversampleExit + end + object edtFiltersize: TEdit + Left = 152 + Top = 28 + Width = 41 + Height = 21 + TabOrder = 1 + Text = '0.1' + OnExit = edtFiltersizeExit + end + object edtDensity: TEdit + Left = 152 + Top = 68 + Width = 41 + Height = 21 + TabOrder = 2 + Text = '10' + OnExit = edtDensityExit + end + object pnlFilterpixels: TPanel + Left = 152 + Top = 48 + Width = 41 + Height = 21 + Alignment = taLeftJustify + BevelOuter = bvLowered + BorderWidth = 2 + Caption = '1' + TabOrder = 3 + end + end + object Panel1: TPanel + Left = 0 + Top = 0 + Width = 201 + Height = 137 + Align = alTop + BevelOuter = bvLowered + TabOrder = 2 + object chkSave: TCheckBox + Left = 8 + Top = 8 + Width = 97 + Height = 17 + Caption = 'Save images' + TabOrder = 0 + end + object chkShowOtherImages: TCheckBox + Left = 8 + Top = 24 + Width = 177 + Height = 17 + Caption = 'Show previous rendered images' + TabOrder = 1 + end + object rgQuality: TRadioGroup + Left = 8 + Top = 48 + Width = 185 + Height = 81 + Caption = 'Quality' + Items.Strings = ( + 'Low' + 'Medium' + 'High' + 'User defined') + TabOrder = 2 + OnClick = rgQualityClick + end + end +end diff --git a/2.10/ScreenSaver/ScrConfig.pas b/2.10/ScreenSaver/ScrConfig.pas new file mode 100644 index 0000000..5620b49 --- /dev/null +++ b/2.10/ScreenSaver/ScrConfig.pas @@ -0,0 +1,181 @@ +unit ScrConfig; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, StdCtrls, ExtCtrls; + +type + TfrmConfig = class(TForm) + btnCancel: TButton; + btnOk: TButton; + Panel1: TPanel; + Panel2: TPanel; + Panel3: TPanel; + chkSave: TCheckBox; + chkShowOtherImages: TCheckBox; + rgQuality: TRadioGroup; + edtOversample: TEdit; + edtFiltersize: TEdit; + edtDensity: TEdit; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + pnlFilterpixels: TPanel; + procedure btnCancelClick(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure btnOkClick(Sender: TObject); + procedure rgQualityClick(Sender: TObject); + procedure edtDensityExit(Sender: TObject); + procedure edtFiltersizeExit(Sender: TObject); + procedure edtOversampleExit(Sender: TObject); + private + procedure SetFilterPixels; + { Private declarations } + public + { Public declarations } + end; + +var + frmConfig: TfrmConfig; + +implementation + +{$R *.dfm} + +uses + ControlPoint, Registry; + +procedure TfrmConfig.FormCreate(Sender: TObject); +var + Registry: TRegistry; +begin + Registry := TRegistry.Create; + try + Registry.RootKey := HKEY_CURRENT_USER; + if Registry.OpenKey('\Software\BobsFreubels\FlameSS', False) then begin + if Registry.ValueExists('SaveImage') then begin + chkSave.Checked := Registry.ReadBool('SaveImage'); + end else begin + chkSave.Checked := False; + end; + if Registry.ValueExists('ShowOtherImages') then begin + chkShowOtherImages.Checked := Registry.ReadBool('ShowOtherImages'); + end else begin + chkShowOtherImages.Checked := False; + end; + if Registry.ValueExists('Quality') then begin + rgQuality.itemindex := Registry.ReadInteger('Quality'); + end else begin + rgQuality.itemindex := 1; + end; + if Registry.ValueExists('Oversample') then begin + edtOversample.Text := IntToStr(Registry.ReadInteger('Oversample')); + end else begin + edtOversample.Text := '1'; + end; + if Registry.ValueExists('Filter') then begin + edtFiltersize.Text := FloatToStr(Registry.ReadFloat('Filter')); + end else begin + edtFiltersize.Text := '0.1'; + end; + if Registry.ValueExists('Density') then begin + edtDensity.Text := FloatToStr(Registry.ReadFloat('Density')); + end else begin + edtDensity.Text := '100'; + end; + end else begin + chkSave.Checked := False; + chkShowOtherImages.Checked := False; + rgQuality.itemindex := 1; + edtOversample.Text := '1'; + edtFiltersize.Text := '0.1'; + edtDensity.Text := '100'; + end; + finally + Registry.Free; + end; + SetFilterPixels; + rgQualityClick(nil); +end; + + +procedure TfrmConfig.btnCancelClick(Sender: TObject); +begin + Close +end; + +procedure TfrmConfig.btnOkClick(Sender: TObject); +var + Registry: TRegistry; +begin + Registry := TRegistry.Create; + try + Registry.RootKey := HKEY_CURRENT_USER; + if Registry.OpenKey('\Software\BobsFreubels\FlameSS', True) then begin + Registry.WriteBool('SaveImage', chkSave.Checked); + Registry.WriteBool('ShowOtherImages', chkShowOtherImages.Checked); + Registry.WriteInteger('Quality', rgQuality.itemindex); + Registry.WriteInteger('Oversample', StrToInt(edtOversample.Text)); + Registry.WriteFloat('Filter', StrToFloat(edtFiltersize.Text)); + Registry.WriteFloat('Density', StrToFloat(edtDensity.Text)); + end; + finally + Registry.Free; + end; + + Close +end; + +procedure TfrmConfig.edtOversampleExit(Sender: TObject); +begin + try + StrToInt(edtOversample.Text); + except + edtOversample.Text := '1'; + end; + + SetFilterPixels +end; + +procedure TfrmConfig.edtFiltersizeExit(Sender: TObject); +begin + try + StrToFloat(edtFiltersize.Text); + except + edtFiltersize.Text := '0.1'; + end; + + SetFilterPixels +end; + +procedure TfrmConfig.edtDensityExit(Sender: TObject); +begin + try + StrToFloat(edtDensity.Text); + except + edtDensity.Text := '10'; + end; +end; + +procedure TfrmConfig.SetFilterPixels; +var + filter_width: integer; +begin + filter_width := Round(2.0 * FILTER_CUTOFF * StrToFloat(edtFiltersize.Text) * StrToInt(edtOversample.Text) ); + if odd(filter_width + StrToInt(edtOversample.Text)) then + inc(filter_width); + pnlFilterpixels.Caption := IntToStr(filter_width); +end; + +procedure TfrmConfig.rgQualityClick(Sender: TObject); +begin + if rgQuality.ItemIndex = 3 then + ClientHeight := panel1.Height + Panel2.Height + panel3.Height + else + ClientHeight := panel1.Height + Panel2.Height; +end; + +end. diff --git a/2.10/ScreenSaver/ScrMain.dfm b/2.10/ScreenSaver/ScrMain.dfm new file mode 100644 index 0000000..9d7748c --- /dev/null +++ b/2.10/ScreenSaver/ScrMain.dfm @@ -0,0 +1,25 @@ +object frmMain: TfrmMain + Left = 223 + Top = 103 + BorderStyle = bsNone + Caption = 'Main' + ClientHeight = 146 + ClientWidth = 231 + Color = clBlack + Font.Charset = ANSI_CHARSET + Font.Color = clWindow + Font.Height = -21 + Font.Name = 'Times New Roman' + Font.Style = [fsBold, fsItalic] + OldCreateOrder = False + WindowState = wsMaximized + OnActivate = FormActivate + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnDestroy = FormDestroy + OnKeyDown = FormKeyDown + OnMouseDown = FormMouseDown + OnPaint = FormPaint + PixelsPerInch = 96 + TextHeight = 24 +end diff --git a/2.10/ScreenSaver/ScrMain.pas b/2.10/ScreenSaver/ScrMain.pas new file mode 100644 index 0000000..28d7c7f --- /dev/null +++ b/2.10/ScreenSaver/ScrMain.pas @@ -0,0 +1,444 @@ +unit ScrMain; + +interface + +uses + Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, + Dialogs, Gauges, Render64, ControlPoint; + +type + TfrmMain = class(TForm) + procedure FormMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); + procedure FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); + procedure FormActivate(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormDestroy(Sender: TObject); + procedure FormPaint(Sender: TObject); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + private + cp : TControlPoint; + Render: TRenderer64; + bStop : boolean; + bm: TBitmap; + + Quality: integer; + bSave: boolean; + bShowOtherImages: boolean; + Oversample: Integer; + FilterSize: double; + Density: double; + + SaveIndex: integer; + SavePath: string; + ImageList: TStringList; + ShowNextImage: TDateTime; + StartTime: TDateTime; + Remainder: TDateTime; + + procedure ReadSettings; + procedure PrePareSave; + procedure Save; + public + procedure Onprogress(prog: double); + end; + +var + frmMain: TfrmMain; + +implementation + +{$R *.dfm} + +uses + math, jpeg, registry, FlameIO, + rndFlame, regstry, global; + +procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + Close; +end; + +procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word; + Shift: TShiftState); +begin + Close; +end; + +procedure TfrmMain.FormActivate(Sender: TObject); +begin + DecimalSeparator := '.'; + + OnActivate := nil; + + ShowCursor(False); + + ReadSettings; + + Remainder := 1; + + // first one quickly + cp.ParseString( 'pixels_per_unit 277.456647 center -1.0982659 0 gamma 2 spatial_filter_radius' + + ' 0.5 contrast 1 brightness 1.5 zoom 0 spatial_oversample 1 sample_density 1 nbatches' + + ' 1 white_level 200 cmap_inter 0 time 0 cmap 33 xform 0 density 1 color 0 var 0 0 0 1 0' + + ' 0 0 coefs 0.466381997 -0.0618700013 0.0792416036 0.610638022 -0.475656986 -0.28115499'+ + ' xform 1 density 1 color 1 var 0 0 0 0 1 0 0 coefs -0.513867021 0.271649003 -0.254521996' + + ' -0.550984025 -0.674094975 -0.600323975'); +(* +'center 0.01 1.96 pixels_per_unit 145.24' + +'spatial_oversample 3 spatial_filter_radius 0.30' + +'sample_density 200.00' + +'nbatches 1 white_level 200 background 0.00 0.00 0.00' + +'brightness 4.00 gamma 4.00 vibrancy 1.00 hue_rotation 0.68 cmap_inter 0' + +'xform 0 density 0.17 color 1.00' + +'var 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00' + +'coefs 0.94 0.69 -0.27 0.75 1.67 0.29' + +'xform 1 density 0.17 color 0.00' + +'var 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00' + +'coefs -0.07 -0.94 0.69 -0.15 1.93 -1.57' + +'xform 2 density 0.17 color 0.00' + +'var 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00' + +'coefs 0.42 -0.37 -0.88 -0.25 -0.65 0.22' + +'xform 3 density 0.17 color 0.00' + +'var 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00' + +'coefs 0.61 0.99 0.06 0.51 -1.59 -1.58' + +'xform 4 density 0.17 color 0.00' + +'var 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00' + +'coefs -0.77 0.12 -0.36 -0.69 -0.74 1.53' + +'xform 5 density 0.17 color 0.00 ' + +'var 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00' + +'coefs 0.58 -0.20 -0.92 0.60 -0.29 1.30'); +*) + cp.sample_density := 2; + cp.Width := ClientWidth; + cp.Height := ClientHeight; + cp.spatial_oversample := 1; + cp.spatial_filter_radius := 0.3; + cp.Gamma := 4; + cp.brightness := 4; + cp.CalcBoundbox; + Render.SetCP(cp); + + StartTime := Now; + Render.Render; + if bstop then + Exit; + BM.Assign(Render.GetImage); + Canvas.StretchDraw(Rect(0,0,ClientWidth, ClientHeight),bm); + + PrepareSave; + if bstop then + Exit; + + ShowNextImage := Now + EncodeTime(0,0,5,0); + + cp.Width := ClientWidth; + cp.Height := ClientHeight; + cp.spatial_filter_radius := 0.2; + cp.Gamma := 4; + cp.brightness := 4; + cp.spatial_oversample := 1; + + Case Quality of + 0: + begin + cp.sample_density := 10; + end; + 1: + begin + cp.sample_density := 100; + end; + 2: + begin + cp.sample_density := 1000; + end; + else + begin + cp.sample_density := Density; + cp.spatial_oversample := Oversample; + cp.spatial_filter_radius := FilterSize; + end; + end; + + // APO setting for randomflame + regstry.ReadSettings; + Global.MainSeed := Round(Random(100000)); + + while true do begin + Remainder := 0; +// cp.RandomCP; +(* + cp2 := cp.Clone; + cp2.pixels_per_unit := (cp.pixels_per_unit * 128)/cp.Width; + cp2.width := 256; + cp2.height := 256; + cp2.spatial_oversample := 1; + cp2.spatial_filter_radius := 0.1; + cp2.sample_density := 1; + cp2.gamma := 2; + cp2.brightness := 1; + cp2.contrast := 1; + + Render.SetCP(cp2); + Render.Test(fracBlack, fracWhite, avgColor); + cp2.Free; +*) +// Canvas.Draw(0,100,Render.GetImage); + +// if (fracBlack > 0.990) or ((avgColor/(fracBlack + 1E-6)) < 0.35) then +// Continue; + + cp := RandomFlame(cp,0); + cp.Width := ClientWidth; + cp.Height := ClientHeight; + cp.spatial_filter_radius := 0.2; + cp.Gamma := 4; + cp.brightness := 4; + cp.spatial_oversample := 1; + + Case Quality of + 0: + begin + cp.sample_density := 10; + end; + 1: + begin + cp.sample_density := 100; + end; + 2: + begin + cp.sample_density := 1000; + end; + else + begin + cp.sample_density := Density; + cp.spatial_oversample := Oversample; + cp.spatial_filter_radius := FilterSize; + end; + end; + cp.CalcBoundbox; + + Remainder := 1; + Render.SetCP(cp); + StartTime := Now; + + Render.Render; + + if bstop then + Exit; + + bm.assign(Render.GetImage); +// bm.Canvas.Font.Color := ClWhite; +// bm.Canvas.Brush.Color := CLBlack; +// bm.Canvas.TextOut(10,10, Format('fracBlack : %.4f',[fracBlack] )); +// bm.Canvas.TextOut(10,26, Format('fracWhite : %.4f',[fracWhite] )); +// bm.Canvas.TextOut(10,42, Format('avgColor : %.4f',[avgColor] )); +// bm.Canvas.TextOut(10,58, Format('ColorValue: %.4f',[avgColor/fracBlack] )); + + Canvas.Draw(0,0,bm); + Save; + ShowNextImage := Now + EncodeTime(0,0,30,0); + end; +end; + +procedure TfrmMain.Onprogress(prog: double); +var + JPeg: TJPEGImage; + NewIndex: Integer; + Elapsed: TDateTime; +begin + if bstop then + Exit; + + if bShowOtherImages and (Now > ShowNextImage) and (ImageList.Count > 0) then begin + NewIndex := Random(ImageList.Count); + + JPeg := TJPEGImage.Create; + JPeg.LoadFromFile(SavePath + ImageList[NewIndex]); + + bm.Assign(JPeg); + JPeg.Free; + + repaint; + + SetbkMode(Canvas.Handle, TRANSPARENT); + Canvas.TextOut(ClientWidth - 150, 10, ImageList[NewIndex]); + ShowNextImage := Now + EncodeTime(0,0,10,0); + end; + + prog := (Render.Slice + Prog)/Render.NrSlices; + +// Canvas.Brush.Color := clBlack; +// Canvas.Fillrect(Rect(7, ClientHeight - 13, ClientWidth - 7, ClientHeight - 7)); + +// Canvas.Brush.Color := clBlack; +// Canvas.Fillrect(Rect(5, ClientHeight - 15, ClientWidth - 5, ClientHeight - 5)); + + + Canvas.Brush.Color := clYellow; + Canvas.FrameRect(Rect(5, ClientHeight - 15, ClientWidth - 5, ClientHeight - 5)); + Canvas.Brush.Color := clYellow; + Canvas.Fillrect(Rect(7, ClientHeight - 13, 7 + Round(prog * (ClientWidth - 14)), ClientHeight - 7)); + Canvas.Brush.Color := clBlack; + Canvas.Fillrect(Rect(7 + Round(prog * (ClientWidth - 14)), ClientHeight - 13, ClientWidth - 7, ClientHeight - 7)); + + Elapsed := Now - StartTime; + Canvas.Brush.Color := clBlack; + Canvas.TextOut(5, ClientHeight - 25 - 2 * Canvas.TextHeight('X'), Format('Elapsed %2.2d:%2.2d:%2.2d.%2.2d', + [Trunc(Elapsed * 24), + Trunc((Elapsed * 24 - Trunc(Elapsed * 24)) * 60), + Trunc((Elapsed * 24 * 60 - Trunc(Elapsed * 24 * 60)) * 60), + Trunc((Elapsed * 24 * 60 * 60 - Trunc(Elapsed * 24 * 60 * 60)) * 100)])); + + if prog > 0 then + Remainder := Min(Remainder, Elapsed * (power(1/prog, 1.2) - 1)); + + Canvas.TextOut(5, ClientHeight - 20 - Canvas.TextHeight('X'), Format('Remainder %2.2d:%2.2d:%2.2d.%2.2d', + [Trunc(Remainder * 24), + Trunc((Remainder * 24 - Trunc(Remainder * 24)) * 60), + Trunc((Remainder * 24 * 60 - Trunc(Remainder * 24 * 60)) * 60), + Trunc((Remainder * 24 * 60 * 60 - Trunc(Remainder * 24 * 60 * 60)) * 100)])); + + Canvas.TextOut(5, ClientHeight - 50 - Canvas.TextHeight('X'), IncludeTrailingPathDelimiter(ExtractFileDir(paramstr(0))) + 'images'); + + Application.ProcessMessages; +end; + +procedure TfrmMain.FormCreate(Sender: TObject); +begin + bm:= TBitmap.create; + randomize; + cp := TControlPoint.Create; + Render := TRenderer64.Create; + Render.OnProgress := Onprogress; + ImageList := TStringList.Create; +end; + +procedure TfrmMain.FormDestroy(Sender: TObject); +begin + ShowCursor(true); + cp.Free; + render.Free; + ImageList.Free; +end; + +procedure TfrmMain.FormPaint(Sender: TObject); +begin + if assigned(bm) then + Canvas.Draw(0,0,bm); +end; + +procedure TfrmMain.FormCloseQuery(Sender: TObject; var CanClose: Boolean); +begin + bm.Free; + Render.Stop; + bStop := True; +end; + +procedure TfrmMain.ReadSettings; +var + Registry: TRegistry; +begin + Registry := TRegistry.Create; + try + Registry.RootKey := HKEY_CURRENT_USER; + if Registry.OpenKey('\Software\BobsFreubels\FlameSS', False) then begin + if Registry.ValueExists('SaveImage') then begin + bSave := Registry.ReadBool('SaveImage'); + end else begin + bSave := False; + end; + if Registry.ValueExists('ShowOtherImages') then begin + bShowOtherImages := Registry.ReadBool('ShowOtherImages'); + end else begin + bShowOtherImages := False; + end; + if Registry.ValueExists('Quality') then begin + Quality := Registry.ReadInteger('Quality'); + end else begin + Quality := 1; + end; + if Registry.ValueExists('Oversample') then begin + Oversample := Registry.ReadInteger('Oversample'); + end else begin + Oversample := 1; + end; + if Registry.ValueExists('Filter') then begin + Filtersize := Registry.ReadFloat('Filter'); + end else begin + Filtersize := 0.1; + end; + if Registry.ValueExists('Density') then begin + Density := Registry.ReadFloat('Density'); + end else begin + Density := 100; + end; + + end else begin + bSave := False; + Quality := 1; + end; + finally + Registry.Free; + end; +end; + +procedure TfrmMain.PrePareSave; +var + sr: TSearchRec; +begin +// if not bSave then +// Exit; + + SaveIndex := 1; + + SavePath := IncludeTrailingPathDelimiter(ExtractFileDir(paramstr(0))) + 'images'; + SavePath := IncludeTrailingPathDelimiter(SavePath); + + ForceDirectories(SavePath); + + if FindFirst(SavePath + '*.jpg', faAnyFile, sr) = 0 then begin + repeat + ImageList.Add(UpperCase(sr.Name)); + until FindNext(sr) <> 0; + FindClose(sr); + end; +end; + +procedure TfrmMain.Save; +var + sl: TStringlist; + ImageName: string; + jpeg : TJPegImage; +begin + if not bSave then + Exit; + + repeat + ImageName := Format('FL_%5.5d.JPG',[SaveIndex]); + Inc(SaveIndex); + until (ImageList.IndexOf(ImageName) < 0); + + jpeg := TJPegImage.Create; + jpeg.assign(bm); + jpeg.CompressionQuality := 80; + jpeg.SaveToFile(SavePath+ImageName); + jpeg.free; + + ImageList.Add(ImageName); + + sl := TStringlist.Create; + + Cp.name := ChangeFileExt(ImageName,''); + sl.add(FlameToXML(cp,False, True)); + + sl.SaveToFile(ChangeFileExt(SavePath+ImageName,'.flame')); + sl.Free; + +// cp.SaveToFile(ChangeFileExt(SavePath+ImageName,'.TXT')); +end; + +end. +