Advertisement
Guest User

Untitled

a guest
Mar 19th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.82 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11.  
  12. namespace WindowsFormsApp1
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         private Bitmap b1, b2;
  17.         private double alphaChannel=1;
  18.         //public int outWidth=700;
  19.         //public int outHeight=700;
  20.         public Form1()
  21.         {
  22.             InitializeComponent();
  23.         }
  24.  
  25.         private void Form1_Load(object sender, EventArgs e)
  26.         {
  27.             this.MaximizeBox = false;
  28.             this.KeyPreview = true;
  29.             picLeft.Click += new EventHandler(LoadImage);
  30.             picRight.Click += new EventHandler(LoadImage);
  31.             btnBlending.Enabled = false;
  32.             btnBlending.Click += new EventHandler(Blending);
  33.             trbBlendingFactor.ValueChanged += new EventHandler(trbBlendingFactor_ValueChanged);
  34.             lblOpacity.Text = alphaChannel.ToString();
  35.         }
  36.  
  37.         private void Form1_KeyDown(object sender, KeyEventArgs e)
  38.         {
  39.             if (e.KeyCode==Keys.F12)
  40.             {
  41.                 Rectangle bounds = Screen.GetBounds(Point.Empty);
  42.                 Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
  43.                 Graphics g = Graphics.FromImage(bitmap);
  44.  
  45.                 g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
  46.  
  47.                 if (b1==null)
  48.                 {
  49.                     b1 = bitmap;
  50.                     picLeft.Image = b1;
  51.                 }
  52.                 else
  53.                 {
  54.                     b2 = bitmap;
  55.                     picRight.Image = b2;
  56.                     btnBlending.Enabled = true;
  57.                 }
  58.  
  59.             }
  60.  
  61.         }
  62.  
  63.  
  64.         private void LoadImage(object sender, EventArgs e)
  65.         {
  66.             PictureBox pic = sender as PictureBox;
  67.  
  68.             OpenFileDialog dialog = new OpenFileDialog();
  69.             dialog.Filter = "Image files | *.BMP; *.JPG; *.PNG";
  70.             dialog.Multiselect = false;
  71.  
  72.             DialogResult d = dialog.ShowDialog();
  73.             if (d==DialogResult.OK)
  74.             {
  75.                 string path = dialog.FileName;
  76.  
  77.                 switch(pic.Name)
  78.                 {
  79.                     case "picLeft":
  80.                         {
  81.                             b1 = new Bitmap(path);
  82.                             pic.Image = b1;
  83.                         }
  84.                         break;
  85.                     case "picRight":
  86.                         {
  87.                             b2 = new Bitmap(path);
  88.                             pic.Image = b2;
  89.                         }
  90.                         break;
  91.                     //default:
  92.                     //    {
  93.                            
  94.                     //    }
  95.                     //    break;
  96.                 }
  97.                 if (b1!=null && b2!=null)
  98.                 {
  99.                     btnBlending.Enabled = true;            
  100.                     //prgBlendingProgress.Maximum = outWidth * outHeight;
  101.                 }
  102.             }
  103.             else if (d != DialogResult.Cancel)
  104.             {
  105.                 MessageBox.Show("Bad file","Bad file",MessageBoxButtons.OK,MessageBoxIcon.Error);
  106.             }
  107.         }
  108.         private void Blending(object sender, EventArgs e)
  109.         {
  110.             prgBlendingProgress.Visible = true;
  111.             lblInProgress.Visible = true;
  112.            
  113.             //back_w.WorkerSupportsCancellation = true;
  114.  
  115.            
  116.             if (back_w.IsBusy==false)
  117.             {
  118.                 back_w.DoWork += new DoWorkEventHandler(Blend);
  119.                 back_w.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BlendDone);
  120.                 back_w.WorkerReportsProgress = true;
  121.                 back_w.ProgressChanged += new ProgressChangedEventHandler((object s, ProgressChangedEventArgs ea) => prgBlendingProgress.Value = ea.ProgressPercentage);
  122.                 back_w.RunWorkerAsync();
  123.             }
  124.             else
  125.             {
  126.                 back_w2.DoWork += new DoWorkEventHandler(Blend);
  127.                 back_w2.RunWorkerCompleted += new RunWorkerCompletedEventHandler(BlendDone);
  128.                 back_w2.WorkerReportsProgress = true;
  129.                 back_w2.ProgressChanged += new ProgressChangedEventHandler((object s, ProgressChangedEventArgs ea) => prgBlendingProgress.Value = ea.ProgressPercentage);
  130.                 back_w2.RunWorkerAsync();
  131.             }
  132.            
  133.         }
  134.  
  135.         private void trbBlendingFactor_ValueChanged(object sender, EventArgs e)
  136.         {
  137.             alphaChannel = (double)trbBlendingFactor.Value / (double)trbBlendingFactor.Maximum;
  138.             lblOpacity.Text = (alphaChannel).ToString();
  139.            
  140.         }
  141.  
  142.         private void Blend(object sender, DoWorkEventArgs e)
  143.         {
  144.             int outWidth = Math.Min(picLeft.Image.Width, picRight.Image.Width);
  145.             int outHeight = Math.Min(picLeft.Image.Height, picRight.Image.Height);
  146.             Bitmap result = new Bitmap(outWidth,outHeight);
  147.  
  148.             Bitmap bb1 = new Bitmap(b1);
  149.             Bitmap bb2 = new Bitmap(b2);
  150.  
  151.             for (int i = 0; i < outWidth; i++)
  152.             {
  153.                 Thread.Sleep(10);
  154.                 back_w.ReportProgress(100*i/outWidth);
  155.                 for (int j = 0; j < outHeight; j++)
  156.                 {
  157.                     Color leftC = bb1.GetPixel(i, j);
  158.                     Color rightC = bb2.GetPixel(i, j);
  159.                     Color c = Color.FromArgb(
  160.                         255,
  161.                         (int)(alphaChannel * leftC.R + (1 - alphaChannel) * rightC.R),
  162.                         (int)(alphaChannel * leftC.G + (1 - alphaChannel) * rightC.G),
  163.                         (int)(alphaChannel * leftC.B + (1 - alphaChannel) * rightC.B)
  164.                         );
  165.  
  166.                     result.SetPixel(i, j, c);
  167.                    // prgBlendingProgress.PerformStep();
  168.                 }
  169.             }
  170.  
  171.             Form resultForm = new Form
  172.             {
  173.                 Width = outWidth+50,//picLeft.Width,
  174.                 Height = outHeight+50//picLeft.Height
  175.             };
  176.             PictureBox pictureBox = new PictureBox
  177.             {
  178.                 Width = outWidth,//picLeft.Width,
  179.                 Height = outHeight,//picLeft.Height,
  180.                 //SizeMode = PictureBoxSizeMode.StretchImage,
  181.                 Image = result
  182.             };
  183.  
  184.             resultForm.Controls.Add(pictureBox);
  185.             //resultForm.Show();
  186.  
  187.             BeginInvoke(new Action(() => resultForm.Show()));
  188.  
  189.  
  190.         }
  191.         private void BlendDone(object sender, RunWorkerCompletedEventArgs e)
  192.         {
  193.             lblInProgress.Visible = false;
  194.             prgBlendingProgress.Visible = false;
  195.         }
  196.     }
  197. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement