مقدمه
اسکرین شات یا تصویر از صفحه، یکی از ویژگیهای کاربردی در برنامهنویسی است که به شما اجازه میدهد تا تصویری از محتوای صفحه نمایش کامپیوتر بگیرید. در سیشارپ، با استفاده از کتابخانههای مختلف میتوان این کار را به سادگی انجام داد. در ادامه، به بررسی یک نمونه کد اسکرین شات در سیشارپ خواهیم پرداخت.
کتابخانههای مورد نیاز
برای گرفتن اسکرین شات در سیشارپ، نیاز به استفاده از فضای نامهای زیر دارید:
```csharp
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
```
نمونه کد
در ادامه یک کد ساده برای گرفتن اسکرین شات از صفحه نمایش ارائه میشود:
```csharp
public void TakeScreenshot()
{
// اندازه صفحه نمایش را دریافت میکنیم
Rectangle bounds = Screen.GetBounds(Point.Empty);
// ایجاد یک تصویر جدید با اندازه صفحه
using Bitmap screenshot = new Bitmap(bounds.Width, bounds.Height);
// ایجاد یک گرافیک از تصویر
using Graphics g = Graphics.FromImage(screenshot);
// گرفتن اسکرین شات
g.CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
// ذخیره تصویر به فرمت PNG
screenshot.Save("screenshot.png", ImageFormat.Png);
}
```
توضیحات کد
- دریافت اندازه صفحه: ابتدا با استفاده از `Screen.GetBounds(Point.Empty)` اندازه صفحه نمایش را دریافت میکنیم.
- ایجاد تصویر: سپس یک شیء از نوع `Bitmap` ایجاد میکنیم که ابعاد آن برابر با اندازه صفحه است.
- ایجاد گرافیک: با استفاده از `Graphics.FromImage` یک گرافیک از تصویر ایجاد میشود.
- گرفتن اسکرین شات: با استفاده از متد `CopyFromScreen` تصویر صفحه نمایش را به تصویر جدید منتقل میکنیم.
- ذخیره تصویر: در نهایت، تصویر به فرمت `PNG` و با نام `screenshot.png` ذخیره میشود.
نتیجهگیری
با استفاده از کدی که ارائه شد، میتوانید به راحتی از صفحه نمایش خود اسکرین شات بگیرید. این قابلیت میتواند در برنامههای مختلف، از جمله نرمافزارهای آموزشی و ابزارهای عیبیابی، بسیار مفید باشد. با کمی تغییر در کد، میتوانید ویژگیهای بیشتری مانند ذخیره در فرمتهای مختلف یا گرفتن اسکرین شات از پنجرههای خاص را نیز پیاده سازی کنید.
نمونه کد اسکرین شات در سیشارپ
در برنامهنویسی سیشارپ، گرفتن اسکرین شات یکی از نیازهای رایج است، به خصوص برای توسعه نرمافزارهای مرتبط با تصویر، تستهای تصویری، یا ابزارهای مانیتورینگ. در این مقاله، قصد دارم به صورت کامل و جامع، نمونه کد گرفتن اسکرین شات در سیشارپ را بررسی کنم، همراه با توضیحات لازم، نکات مهم، و چند مثال کاربردی.
پیشنیازهای اولیه
قبل از شروع، باید توجه کنید که برای انجام این کار، نیاز دارید:
- استفاده از فضای نام System.Drawing
- دسترسی به کلاسهای مربوط به تصویر و دستگاههای گرافیکی
در پروژهتان، مطمئن شوید که ارجاع به اسمبلی System.Drawing دارید. در پروژههای ویندوز فرم، این فضای نام بهطور پیشفرض وارد شده است، اما در پروژههای دیگر، ممکن است نیاز باشد آن را به صورت دستی اضافه کنید.
کد نمونه پایه برای گرفتن اسکرین شات
در ادامه، نمونه کد سادهای را میبینید که تمام صفحه نمایش را اسکرین میکند و تصویر آن را در فایل ذخیره میکند:
```csharp
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
namespace ScreenshotExample
{
class Program
{
static void Main(string[] args)
{
// تعریف اندازه صفحه نمایش
Rectangle bounds = Screen.PrimaryScreen.Bounds;
// ساختن یک تصویر جدید با همان اندازه
using (Bitmap screenshot = new Bitmap(bounds.Width, bounds.Height))
{
// ایجاد یک گرافیک برای تصویر
using (Graphics g = Graphics.FromImage(screenshot))
{
// کپی کردن کل صفحه نمایش
g.CopyFromScreen(bounds.X, bounds.Y, 0, 0, bounds.Size);
}
// ذخیره تصویر در فایل
screenshot.Save("screenshot.png", ImageFormat.Png);
}
Console.WriteLine("اسکرین شات با موفقیت گرفته شد!");
}
}
}
```
توضیحات کد:
- ابتدا، اندازه صفحه نمایش اصلی را با `Screen.PrimaryScreen.Bounds` مشخص میکنیم.
- سپس، یک شی `Bitmap` با همان اندازه میسازیم.
- بعد، با استفاده از `Graphics.FromImage()`، یک شی گرافیک مربوط به تصویر ایجاد میکنیم.
- در نهایت، با `CopyFromScreen()`، بخش مورد نظر از صفحهنمایش را در تصویر کپی میکنیم.
- در پایان، تصویر را به صورت PNG ذخیره میکنیم.
نکات مهم
- اسکرین شات چند صفحهای: اگر نیاز دارید از چند مانیتور، یا صفحههای خاصی عکس بگیرید، باید اندازه و موقعیت آنها را مشخص کنید و عملیات را بر اساس آن انجام دهید.
- پروژههای ویندوز فرم: اگر در برنامه ویندوز فرم کار میکنید، میتوانید از کنترلهای دیگر نیز بهره ببرید، مثلا گرفتن اسکرین از کنترل خاص.
- ذخیرهسازی تصاویر: میتوانید تصاویر را در قالبهای مختلف مثل JPEG، BMP، TIFF ذخیره کنید. فقط کافی است نوع `ImageFormat` را تغییر دهید.
- مدیریت حافظه: در این نمونه، از `using` برای اطمینان از آزادسازی منابع استفاده شده است. این کار ضروری است، چون منابع گرافیکی سنگین هستند.
- گرفتن اسکرین شات از بخش خاص: اگر نیاز دارید فقط بخشی از صفحه را بگیرید، باید مختصات و اندازه آن بخش را مشخص کنید، مثلا به جای `bounds`, یک `Rectangle` دلخواه تعریف کنید.
کد نمونه برای بخش خاص
در این قسمت، نمونهای برای گرفتن تصویر از یک ناحیه خاص داریم:
```csharp
Rectangle section = new Rectangle(100, 100, 300, 200);
using (Bitmap partScreenshot = new Bitmap(section.Width, section.Height))
{
using (Graphics g = Graphics.FromImage(partScreenshot))
{
g.CopyFromScreen(section.Location, Point.Empty, section.Size);
}
partScreenshot.Save("section_screenshot.png", ImageFormat.Png);
}
```
در این حالت، فقط ناحیهای با مختصات (100,100) و اندازه 300×200 پیکسل گرفته میشود.
پیشنهاد نهایی
برای توسعه بهتر، پیشنهاد میکنم امکانات زیر را بررسی کنید:
- افزودن قابلیت ضبط خودکار در فواصل زمانی مشخص (اسکرین شاتهای متوالی)
- افزودن قابلیت ضبط اسکرین شات از پنجره یا کنترل خاص، نه کل صفحه
- افزودن گزینههای ذخیرهسازی در مسیرهای دلخواه و با فرمتهای مختلف
- افزودن واسط کاربری برای انتخاب ناحیه یا تنظیمات ضبط
در نهایت، این نمونهها پایهای قدرتمند برای پروژههای پیچیدهتر هستند، و با کمی خلاقیت، میتوانید ابزارهای حرفهای و کاربرپسند بسازید. اگر سوال خاصی دارید یا نیاز به نمونههای پیشرفتهتر دارید، حتما بگویید!