protected void CleanShutdown() { // Clean-Up Routines Here GerchbergSaxtonDLL.Free(); Common.Free(InputPixbuf, PhasePixbuf, ReconPixbuf, InputImage.Pixbuf, PhaseImage.Pixbuf, ReconImage.Pixbuf); }
unsafe protected void ComputePhase() { Tic(); var start = Ticks(); var srcx = InputPixbuf.Width; var srcy = InputPixbuf.Height; var size = srcx * srcy; var phase = new PhaseOutput(size); if (Spots.Count > 0) { SpotsDLL.SetParameters(srcx, srcy, Parameters.NFFT, Spots, true); var spots = SpotsDLL.ComputePhase("spots"); phase.Add(spots, size); } if (GerchbergSaxtonPhase.Active) { GerchbergSaxtonDLL.SetIterations(Convert.ToInt32(Iterations.Value)); GerchbergSaxtonDLL.SetTarget(InputPixbuf); var gs = GerchbergSaxtonDLL.ComputePhase("gs"); phase.Add(gs, size); gs.Free(); } if (LensPhase.Active) { LensPhaseDLL.SetParameters(srcx, srcy, Parameters.LensZ, Parameters.Pitch, Parameters.Wavelength); var lens = LensPhaseDLL.ComputePhase("lens"); phase.Add(lens, size); lens.Free(); } if (BlazedPhase.Active) { BlazedPhaseDLL.SetParameters(srcx, srcy, Parameters.BlazedX, Parameters.BlazedY); var blazed = BlazedPhaseDLL.ComputePhase("blazed"); phase.Add(blazed, size); blazed.Free(); } var pixbuf = Common.PreparePixbuf(phase.Phase, srcx, srcy); if (PhasePixbuf != null && pixbuf != null) { Common.Free(PhasePixbuf); PhasePixbuf = Common.InitializePixbuf(pixbuf.Width, pixbuf.Height); pixbuf.Composite(PhasePixbuf, 0, 0, pixbuf.Width, pixbuf.Height, 0, 0, 1, 1, InterpType.Nearest, 255); ResetPhaseScrollBars(); RenderImage(PhaseImage, PhasePixbuf, Parameters.PhaseX, Parameters.PhaseY); } phase.Free(); Common.Free(pixbuf); var elapsed = Ticks() - start; Elapsed.Text = elapsed.ToString(ci); PhaseElapsed.Text = elapsed.ToString(ci); }