ایجاد ابزار برش در سی شارپ با کلید میانبر
پنجشنبه 21 خرداد 1394در این مقاله یاد خواهیم گرفت که چگونه در سی شارپ یک عکس از هرجای صفحه بگیریم ،این ابزار به ما اجازه میدهد از یک قسمت دلخواه از عکس، کپی گرفته و در صفحه Paint یا هر جای دیگر جایگزین کنیم
دراین مقاله قصد داریم طریقه عکس گرفتن در سی شارپ را به شما دوستان آموزش بدهیم این روش باعث میشود شما از هرجای صفحه دسکتاپ که خواستید عکس گرفته و همچنین همه عکس یا قسمتی ازآن را انتخاب وذخیره کنید.
قبلا در ویندوز 7 برای عکس گرفتن بایستی کلید میانبر Print Screen از صفحه مورد نظر عکس گرفته آن را درPaint یا با هر ویرایشگر دیگری بازکرده ولی با استفاده از این روش وابزار نیاز به ویرایشگر حذف شده است
برای شروع یک پروژه از نوع Web From ایجاد کنیم
و از ToolBox ، یک pictuerBox اضافه میکنیم
فقط چند نکته را یاداوری کنم که بایستی خواص زیر برای pictuerBox و صفحه اصلی تنظیم شده باشد.
در صفحه اصلی : • WindowState – Maximized
و در pictuerBox : خاصیت SizeMode=Zoom قرار میدهیم
حال در رویداد loadصفحه کد های زیر را اضافه کنید .
private void Form1_Load(object sender, EventArgs e) { this.Hide(); //Create the Bitmap Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); //Create the Graphic Variable with screen Dimensions Graphics graphics = Graphics.FromImage(printscreen as Image); //Copy Image from the screen graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); //Create a temporal memory stream for the image using (MemoryStream s = new MemoryStream()) { //save graphic variable into memory printscreen.Save(s, ImageFormat.Bmp); pictureBox1.Size = new System.Drawing.Size(this.Width, this.Height); //set the picture box with temporary stream pictureBox1.Image = Image.FromStream(s); } //Show Form this.Show(); //Cross Cursor Cursor = Cursors.Cross; this.WindowState = FormWindowState.Maximized; }
حال بایستی به تعریف چند متغیر برای حرکت عکس در موقعیت های مختلف بپردازیم
//These variables control the mouse position int selectX; int selectY; int selectWidth; int selectHeight; public Pen selectPen; //This variable control when you start the right click bool start = false;
حال برای حرکت عکس در جهات مختلف در رویداد MouseMove،pictuerBOx کلیک کرده و کد های زیربه را آن اضافه میکنیم.
private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (pictureBox1.Image == null) return; //validate if right-click was trigger if (start) { //refresh picture box pictureBox1.Refresh(); //set corner square to mouse coordinates selectWidth = e.X - selectX; selectHeight = e.Y - selectY; //draw dotted rectangle pictureBox1.CreateGraphics().DrawRectangle(selectPen, selectX, selectY, selectWidth, selectHeight); } }
وحال در رویداد MouseDown،در pictuerBOx کد های زیر را مینویسیم
private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (!start) { if (e.Button == System.Windows.Forms.MouseButtons.Left) { //starts coordinates for rectangle selectX = e.X; selectY = e.Y; selectPen = new Pen(Color.Red, 1); selectPen.DashStyle = DashStyle.DashDotDot; } //refresh picture box pictureBox1.Refresh(); //start control variable for draw rectangle start = true; } else { //validate if there is image if (pictureBox1.Image == null) return; //same functionality when mouse is over if (e.Button == System.Windows.Forms.MouseButtons.Left) { pictureBox1.Refresh(); selectWidth = e.X - selectX; selectHeight = e.Y - selectY; pictureBox1.CreateGraphics().DrawRectangle(selectPen, selectX, selectY, selectWidth, selectHeight); } start = false; //function save image to clipboard SaveToClipboard(); } }
و حال در این مرحله یک رویداد برای ذخیره عکس در حافظه مینویسم
private void SaveToClipboard() { //validate if something selected if (selectWidth > 0) { Rectangle rect = new Rectangle(selectX, selectY, selectWidth, selectHeight); //create bitmap with original dimensions Bitmap OriginalImage = new Bitmap(pictureBox1.Image, pictureBox1.Width, pictureBox1.Height); //create bitmap with selected dimensions Bitmap _img = new Bitmap(selectWidth, selectHeight); //create graphic variable Graphics g = Graphics.FromImage(_img); //set graphic attributes g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; g.DrawImage(OriginalImage, 0, 0, rect, GraphicsUnit.Pixel); //insert image stream into clipboard Clipboard.SetImage(_img); } //End application Application.Exit(); }
همان طور که از کد ها مشخص است پس اجرا با انتخاب کردن کلیک چپ در موس میتوان یک بخش از عکس را انتخاب نموده و پس از رها کردن موس ،عکس در حافظه ذخیره میشود
در این مرحله برای ساختن کلید میانبر ، کافی است در binرفته و روی exe برنامه راست کلیک کرده و گزینه Create a new Shortcut. را برای ایجاد یک Shortcut مانند شکل زیر انتخاب میکنیم
حال در این مرحله بازدن کلید Alt+shift+Cاز صفحه عکس میگرید
موفق باشید
- C#.net
- 3k بازدید
- 0 تشکر