示例#1
0
        private void bw_doPaint(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;

            if (worker.CancellationPending)
            {
                e.Cancel = true;
                return;
            }

            if (pb_original.Image != null)
            {
                //init
                long[,] cmat, amat;
                data2pass received_data = (data2pass)e.Argument;
                float     progress      = 0F;
                int       counter       = 0;

                int            xseg     = received_data.get_xseg();
                int            yseg     = received_data.get_yseg();
                int            ampl     = received_data.get_ampl();
                int            freq     = received_data.get_freq();
                bool           saveflag = received_data.gets_saveflag();
                PaintEventArgs pearg    = received_data.get_pe_arg();

                Analyzer analyzer = new Analyzer(pb_original, xseg, yseg);
                analyzer.analyze();
                Drawer drawer = new Drawer(pb_draw);

                cmat = analyzer.getColorMatrix();
                amat = analyzer.getAlphaMatrix();

                for (int yn = 0; yn < yseg - 1; yn++)
                {
                    for (int xn = 0; xn < xseg - 1; xn++)
                    {
                        drawing = drawer.generate(pearg, pb_draw, xseg, yseg, ampl * Math.Abs(cmat[xn, yn] / 10000000), freq * Math.Abs(cmat[xn, yn] / 1000000), xn, yn);
                        counter++;
                        progress = (float)(counter * 100) / (float)((xseg - 1) * (yseg - 1));

                        worker.ReportProgress((int)progress);
                    }
                }

                // this routine run only when user want it
                if (saveflag)
                {
                    string       s        = drawer.svg_graphics.WriteSVGString();
                    string       tempFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "exported_pic" + DateTime.Now.ToString().Replace(" ", "").Replace(":", "_").Replace(".", "-") + ".svg");
                    StreamWriter tw       = new StreamWriter(tempFile, false);
                    tw.Write(s);
                    tw.Close();
                }
            }
        }
示例#2
0
        private void pb_draw_Paint(object sender, PaintEventArgs e)
        {
            // prepare data to pass
            data2pass d2p = new data2pass(trackBarDetails.Value, trackBarLinesCount.Value, trackBarAmpl.Value, trackBarFreq.Value, e, needsave);

            if (bw.IsBusy != true && needpaint)
            {
                bw.RunWorkerAsync(d2p);
            }
            needpaint = false;
            needsave  = false;
        }