Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace WindowsFormsApp1
- {
- public partial class Form1 : Form
- {
- private Bitmap b1, b2;
- private double alphaChannel=1;
- //public int outWidth=700;
- //public int outHeight=700;
- public Form1()
- {
- InitializeComponent();
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- this.MaximizeBox = false;
- this.KeyPreview = true;
- picLeft.Click += new EventHandler(LoadImage);
- picRight.Click += new EventHandler(LoadImage);
- btnBlending.Enabled = false;
- btnBlending.Click += new EventHandler(Blending);
- trbBlendingFactor.ValueChanged += new EventHandler(trbBlendingFactor_ValueChanged);
- lblOpacity.Text = alphaChannel.ToString();
- }
- private void Form1_KeyDown(object sender, KeyEventArgs e)
- {
- if (e.KeyCode==Keys.F12)
- {
- Rectangle bounds = Screen.GetBounds(Point.Empty);
- Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
- Graphics g = Graphics.FromImage(bitmap);
- g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
- if (b1==null)
- {
- b1 = bitmap;
- picLeft.Image = b1;
- }
- else
- {
- b2 = bitmap;
- picRight.Image = b2;
- btnBlending.Enabled = true;
- }
- }
- }
- private void LoadImage(object sender, EventArgs e)
- {
- PictureBox pic = sender as PictureBox;
- OpenFileDialog dialog = new OpenFileDialog();
- dialog.Filter = "Image files | *.BMP; *.JPG; *.PNG";
- dialog.Multiselect = false;
- DialogResult d = dialog.ShowDialog();
- if (d==DialogResult.OK)
- {
- string path = dialog.FileName;
- switch(pic.Name)
- {
- case "picLeft":
- {
- b1 = new Bitmap(path);
- pic.Image = b1;
- }
- break;
- case "picRight":
- {
- b2 = new Bitmap(path);
- pic.Image = b2;
- }
- break;
- //default:
- // {
- // }
- // break;
- }
- if (b1!=null && b2!=null)
- {
- btnBlending.Enabled = true;
- //prgBlendingProgress.Maximum = outWidth * outHeight;
- }
- }
- else if (d != DialogResult.Cancel)
- {
- MessageBox.Show("Bad file","Bad file",MessageBoxButtons.OK,MessageBoxIcon.Error);
- }
- }
- private void Blending(object sender, EventArgs e)
- {
- prgBlendingProgress.Visible = true;
- lblInProgress.Visible = true;
- //back_w.WorkerSupportsCancellation = true;
- if (back_w.IsBusy==false)
- {
- back_w.DoWork += new DoWorkEventHandler(Blend);
- back_w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BlendDone);
- back_w.WorkerReportsProgress = true;
- back_w.ProgressChanged += new ProgressChangedEventHandler((object s, ProgressChangedEventArgs ea) => prgBlendingProgress.Value = ea.ProgressPercentage);
- back_w.RunWorkerAsync();
- }
- else
- {
- back_w2.DoWork += new DoWorkEventHandler(Blend);
- back_w2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BlendDone);
- back_w2.WorkerReportsProgress = true;
- back_w2.ProgressChanged += new ProgressChangedEventHandler((object s, ProgressChangedEventArgs ea) => prgBlendingProgress.Value = ea.ProgressPercentage);
- back_w2.RunWorkerAsync();
- }
- }
- private void trbBlendingFactor_ValueChanged(object sender, EventArgs e)
- {
- alphaChannel = (double)trbBlendingFactor.Value / (double)trbBlendingFactor.Maximum;
- lblOpacity.Text = (alphaChannel).ToString();
- }
- private void Blend(object sender, DoWorkEventArgs e)
- {
- int outWidth = Math.Min(picLeft.Image.Width, picRight.Image.Width);
- int outHeight = Math.Min(picLeft.Image.Height, picRight.Image.Height);
- Bitmap result = new Bitmap(outWidth,outHeight);
- Bitmap bb1 = new Bitmap(b1);
- Bitmap bb2 = new Bitmap(b2);
- for (int i = 0; i < outWidth; i++)
- {
- Thread.Sleep(10);
- back_w.ReportProgress(100*i/outWidth);
- for (int j = 0; j < outHeight; j++)
- {
- Color leftC = bb1.GetPixel(i, j);
- Color rightC = bb2.GetPixel(i, j);
- Color c = Color.FromArgb(
- 255,
- (int)(alphaChannel * leftC.R + (1 - alphaChannel) * rightC.R),
- (int)(alphaChannel * leftC.G + (1 - alphaChannel) * rightC.G),
- (int)(alphaChannel * leftC.B + (1 - alphaChannel) * rightC.B)
- );
- result.SetPixel(i, j, c);
- // prgBlendingProgress.PerformStep();
- }
- }
- Form resultForm = new Form
- {
- Width = outWidth+50,//picLeft.Width,
- Height = outHeight+50//picLeft.Height
- };
- PictureBox pictureBox = new PictureBox
- {
- Width = outWidth,//picLeft.Width,
- Height = outHeight,//picLeft.Height,
- //SizeMode = PictureBoxSizeMode.StretchImage,
- Image = result
- };
- resultForm.Controls.Add(pictureBox);
- //resultForm.Show();
- BeginInvoke(new Action(() => resultForm.Show()));
- }
- private void BlendDone(object sender, RunWorkerCompletedEventArgs e)
- {
- lblInProgress.Visible = false;
- prgBlendingProgress.Visible = false;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement