예제 #1
0
    protected void CleanShutdown()
    {
        // Clean-Up Routines Here
        GerchbergSaxtonDLL.Free();

        Common.Free(InputPixbuf, PhasePixbuf, ReconPixbuf, InputImage.Pixbuf, PhaseImage.Pixbuf, ReconImage.Pixbuf);
    }
예제 #2
0
    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);
    }