کار با تصاویر در سی شارپ (مبتدی)

کار با تصاویر در سی شارپ (مبتدی)

در این آموزش قصد داریم با نحوه ی بارگذاری، ایجاد و ذخیره تصاویر در سی شارپ آشنا شویم. سعی شده تا مطالب ارائه شده در این آموزش ساده و کاربردی باشد و همچنین از توضیحات اضافی و غیر ضروری پرهیز شده تا مطالعه آن در کوتاهترین زمان ممکن صورت بگیرد. در انتها نیز نمونه پروژه ای برای درک بهتر آموزش در اختیار شما قرار گرفته است.
برای کارکردن با تصاویر ابتدا باید Using System.Drawing رو به قسمت using ها اضافه کنید تا کلاس های مربوط به این کار به پروژه اضافه شوند.

img-in-csharp1خواندن تصاویر از فایل

برای بارگذاری فایل های تصویری میتوانید از نمونه کد زیر استفاده کنید:

1
Image newImage = Image.FromFile("SampImag.jpg");

توسط متد Image.FromFile می توان اغلب فایل های تصویری نظیر فایل هایی با پسوند .bmp ، .jpg ، .png و… را بارگذاری کرد. با استفاده از کد بالا می توانید فایل تصویری SampImag که پسوند آن .jpg است و در کنار فایل اجرایی برنامه قرار گرفته را بارگذاری کنید. چنانچه فایل تصویری مورد نظر شما در جای دیگری از حافظه باشد، باید آدرس دقیق فایل را به این متد بدهیم تا تصویر مورد نظر به درستی بارگذاری شود. منظور از آدرس کامل این است که برای آدرس دهی از نام درایو شروع کرده و سپس نام پوشه یا پوشه هایی که باید پیمایش شوند تا به فایل مورد نظر برسیم را نوشته و پس از هر کدام یک علامت اسلش قرار میدهیم تا به فایل مورد نظر برسیم. مثال:

1
Image newImage = Image.FromFile("C:\\myapp\SampImag.jpg");

اگر بخواهیم کاربر عکس مورد نظر خود را برای بارگذاری در برنامه انتخاب کند، باید از کنترل OpenFileDialog استفاده کنیم. برای این کار یک OpenFileDialog بر روی فرم قرار می دهیم و نام آن را myOpenFileDialog و خصوصیت Filter آن را برابر “All Files|*.*” می گذاریم. برای نمایش تصویر باید از کنترل PictureBox استفاده کنیم. بر روی فرم برنامه یک PictureBox قرار دهید و نام آن را myPictureBox بگذارید و خصوصیت SizeMode آن را به StretchImage تغییر دهید تا در صورت بارگذاری تصاویر با سایز بالا، تمام تصویر نمایش داده شود. یک Button هم برای انتخاب عکس در نظر می گیریم و خصوصیت Text آن را برابر “بارگذاری عکس” و Name آن را برابر LoadImageBtn قرار می دهیم. حالا در رویداد LoadImageBtn_Click کد زیر را کپی می کنیم. با اینکار هنگام کلیک بر روی دکمه مورد نظر، پنجره انتخاب فایل نمایان می شود و کاربر می تواند عکس مورد نظر خود را انتخاب کند. پس از انتخاب توسط کاربر، عکس مورد نظر برای نمایش در PictureBox بارگذاری خواهد شد.

images-in-c-sharp-level1-2

1
2
3
4
5
6
7
8
9
10
11
myOpenFileDialog.ShowDialog();
if(myOpenFileDialog.FileName != "")
{
Image newImage = Image.FromFile(myOpenFileDialog.FileName);
pictureBox1.Image = newImage;
}

ایجاد تصاویر با برنامه نویسی

برای ایجاد تصویر می توانید از نمونه کد زیر استفاده کنید:

1
2
3
Image newImag = newBitmap(260,120);
myPictureBox.Image = newImag;

چنانچه کد بالا را اجرا کنید، تغییری در PictureBox  مشاهده نخواهید کرد. دلیل آن این است که شما فقط تصویر را ایجاد کرده اید، اما این تصویر در حالت پیشفرض Transparent است. برای اینکه بتوانید آن را مشاهده کنید، ابتدا باید آن را رنگ آمیزی نمایید. برای انجام این کار باید از کلاس Graphics کمک بگیرید. یک Object از این کلاس بسازید و تصویری که ایجاد نمودید را به آن بدهید تا بتوانیم اعمال گرافیکی نظیر رنگ آمیزی، ترسیم نقطه، خط، اشکال هندسی و متن را بر روی تصویر اعمال کنیم. برای ساخت Object از کلاس Graphics می توانید از نمونه کد زیر کمک بگیرید:

1
Graphics myGraphic = Graphics.FromImage(newImage);

پس از اینکه شیء myGraphic را ساختید، قادر خواهید بود تا اعمال گرافیکی ذکر شده را بر روی آن انجام دهید:

رنگ آمیزی پس زمینه:

images-in-c-sharp-level1-3

با استفاده از متد FillRectangle مربوط به شیء myGraphic می توانید تصویر خود را رنگ آمیزی کنید. در واقع این تابع یک مستطیل توپر رسم می کند که شما باید مختصات ابتدا و انتهای قطر آن و همچنین رنگ مورد نظر خود را برای رسم مشخص کنید. این متد به چهار طریق مختلف مقدار دهی می شود. ساده ترین نوع آن تعیین مختصات شروع و طول و عرض مستطیل است. به نمونه کد زیر دقت کنید:

1
myGraphic.FillRectangle(Brushes.DarkGreen, 0, 0, 260, 120);

در نمونه کد بالا، رنگ مورد نظر “سبز تیره” و به ترتیب مختصات x و y شروع رسم، طول و ارتفاع مستطیل مشخص شده است. همانطور که می بینید این مستطیل تمام تصویر را دربرمی گیرد. چنانچه مختصات و طول و عرض اشکال را خارج از محدوده تصویر انتخاب کنید قادر به رویت آن ها نخواهید بود.

نکته: مختصات ۰ و ۰ بیانگر سمت چپ و بالا می باشد. در کلاس Graphics مبدا تصاویر همیشه این نقطه است. به بیان ساده تر، محور y ها در این کلاس با پایین آمدن افزایش یافته و محور x ها با حرکت به سمت راست!

ترسیم متن:

images-in-c-sharp-level1-1

برای ترسیم متن علاوه بر تعیین رنگ و متن مورد نظر، باید Font مورد نظر خود را هم تعیین کنید. از آنجایی که فونت مورد نظر باید در سیستم مقصد نصب شده باشد و آموزش نصب فونت هدف این آموزش نیست، ما از فونت Tahoma که در تمامی ویندوزها به صورت پیشفرض موجود است استفاده می کنیم. خوشبختانه امکان ترسیم متن فارسی در سی شارپ وجود دارد و برای رسم متن فارسی نیاز به کدنویسی اضافه نخواهیم داشت. اما متاسفانه متن های فارسی مانند متن های انگلیسی از چپ به راست رسم می شوند، یعنی مختصات شروع رسم آنها در سمت چپ نوشته قرار می گیرد و در نتیجه برای نمایش صحیح متن فارسی باید مختصات مناسب را با چند بار آزمون بدست آورد. به نمونه کد زیر دقت نمایید:

1
2
3
Font myFont = newFont("Tahoma",9, FontStyle.Bold);
stringmyString = "امپراتوری من | تازه های علم و فناوری";
myGraphic.DrawString(myString, myFont, Brushes.White, 15,60);

دخیره تصاویر در حافظه

برای ذخیره تصویر یک SaveFileDialog بر روی فرم قرار دهید و نام آن را mySaveFileDialog قرار داده و خصوصیت Filter آن را برابر “Portable Network Graphic|*.png” قرار دهید. اکنون کافیست از متد Save مربوط به کلاس Image استفاده کنیم. اگر بخواهیم تصاویر با پسوند مشخصی ذخیره شوند می توانیم از امکانات using System.Drawing.Imaging بهره ببریم. به کمک این کلاس می توانیم فرمت مورد نظر برای ذخیره تصویر را تعیین کنیم. به نمونه کد زیر دقت کنید:

1
2
3
4
5
6
7
8
9
10
11
mySaveFileDialog.ShowDialog();
if(mySaveFileDialog.FileName !="")
{
Image newImage = pictureBox1.Image;
newImage.Save(mySaveFileDialog.FileName,ImageFormat.Png);
}

موفق و پیروز باشید!

 

 

 به کانال برنامه نویسی ما پیوندید واز آخرین مطالب روز باخبر شوید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *