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(); } } }
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; }