using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Trigger.Classes.Screen; namespace MultiWallpaperMaker { public partial class Form1 : Form { private string imagePath; public string ImagePath { get { return this.imagePath; } set { try { this.Image = new Bitmap(System.Drawing.Image.FromFile(value)); this.imagePath = value; } catch (Exception e) { MessageBox.Show(e.Message); } } } public event EventHandler ImageChanged; private Bitmap image; public Bitmap Image { get { return this.image; } private set { if ((object)this.image != null) this.image.Dispose(); this.image = value; if (this.ImageChanged != null) this.ImageChanged(this, new EventArgs()); } } public Bitmap DisplayedImage { get { if ((object)this.image == null) return null; Bitmap image = this.image.Clone() as Bitmap; using (Graphics g = Graphics.FromImage(image)) { Color c = Color.FromArgb((int)((uint)new Random().Next(0x00FFFFFF) | 0xFF000000)); SolidBrush brush = new SolidBrush(c); Pen pen = new Pen(brush, 2); foreach (var screen in this.Screens) { g.DrawRectangle(pen, this.getRectangle(screen)); } pen.Dispose(); } return image; } } private void updateDisplay() { if ((object)this.pictureBox1.Image != null) this.pictureBox1.Image.Dispose(); this.pictureBox1.Image = this.DisplayedImage; } public double downscale; public double Downscale { get { return this.downscale; } private set { if (this.downscale == value) return; this.downscale = value; if (this.DownscaleChanged != null) this.DownscaleChanged(this, new EventArgs()); } } public event EventHandler DownscaleChanged; public Point startPoint; public Point StartPoint { get { return this.startPoint; } private set { if (this.startPoint == value) return; this.startPoint = value; if (this.StartPointChanged != null) this.StartPointChanged(this, new EventArgs()); } } public event EventHandler StartPointChanged; public List Screens { get; private set; } private Nullable mouseDragStart; public Form1() { InitializeComponent(); this.AllowDrop = true; this.DragEnter += Form1_DragEnter; this.DragDrop += Form1_DragDrop; this.MouseWheel += (s, e) => this.Downscale += e.Delta / 10000.0; this.ImageChanged += (s, e) => this.updateDisplay(); this.DownscaleChanged += (s, e) => this.updateDisplay(); this.StartPointChanged += (s, e) => this.updateDisplay(); this.pictureBox1.MouseDown += (s, e) => this.mouseDragStart = e.Location; this.pictureBox1.MouseUp += (s, e) => this.mouseDragStart = null; this.pictureBox1.MouseMove += Form1_MouseMove; this.Screens = Trigger.Status.Screen.AllScreens; this.Downscale = 1; } void Form1_MouseMove(object sender, MouseEventArgs e) { if (this.mouseDragStart == null) return; this.StartPoint += new Size(e.Location - new Size(this.mouseDragStart.Value)); this.mouseDragStart = e.Location; } void Form1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; } void Form1_DragDrop(object sender, DragEventArgs e) { if (!e.Data.GetDataPresent(DataFormats.FileDrop)) return; string[] paths = (string[])e.Data.GetData(DataFormats.FileDrop); this.ImagePath = paths[0]; } private void button1_Click(object sender, EventArgs e) { if ((object)this.Image == null) return; this.Image.RotateFlip(RotateFlipType.RotateNoneFlipX); if (this.ImageChanged != null) this.ImageChanged(this, new EventArgs()); } private void button3_Click(object sender, EventArgs e) { if (this.Image == null) return; string file = Path.GetDirectoryName(this.imagePath); file = Path.Combine(file, Path.GetFileNameWithoutExtension(this.imagePath)); for (int i = 0; i < this.Screens.Count; i++) { Bitmap image = this.Image.Clone(this.getRectangle(this.Screens[i]), this.Image.PixelFormat); image.Save(file + i + ".bmp"); } } Rectangle getRectangle(ScreenEx screen) { var location = this.StartPoint + new Size((int)(screen.Bounds.Location.X * this.Downscale), (int)(screen.Bounds.Location.Y * this.Downscale)); var size = new Size((int)(screen.Bounds.Size.Width * this.Downscale), (int)(screen.Bounds.Size.Height * this.Downscale)); return new Rectangle(location, size); } } }