تبیان، دستیار زندگی

آشنایی با گرافیک در سی شارپ، جلسه چهارم

در جلسه ی قبل با برخی مفاهیم اولیه برای ایجاد تغییرات در تصاویر و نیز کنترل هایی برای باز کردن عکس و انتخاب رنگ آشنا شدیم، در ادامه برای تغییرات و انتخاب رنگ لازم است ...
عکس نویسنده
عکس نویسنده
بازدید :
زمان تقریبی مطالعه :

آشنایی با گرافیک در سی شارپ، جلسه چهارم

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

هدف کلی: مقدمه ای بر پروژه های پردازش تصویر
سرفصل های تئوری: 

- تغییر رنگ تصاویر
- ذخیره تصاویر
- چرخش تصاویر

ادامه کار با عکس:
در جلسه ی قبل با برخی مفاهیم اولیه برای ایجاد تغییرات در تصاویر و نیز کنترل هایی برای باز کردن عکس و انتخاب رنگ آشنا شدیم، در ادامه برای تغییرات و انتخاب رنگ لازم است در رویداد آیتم انتخاب رنگ کد کلیک کرده و کد زیر را بنویسید.

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

به جهت اینکه trackbar مقدار value پیش فرض دارد. بنابراین باید قبل از فراخوانی تابع Fill-Layer، آن را مقداردهی کنید. در نهایت مقدار Image آن برگردانده و در خاصیت Picture Box Image نمایش داده می شود. برای کد تصویر پیش فرض نیز لازم است مقادیر پیش فرض Picture Box Image و همچنین مقدار value  - کنترل trackbar مقدار 127 را ذخیره کنید.

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

سپس برنامه را اجرا نمایید:

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

 

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

در آخر در رویداد آیتم ذخیره عکس نیز برای نوع ذخیره سازی به صورت زیر عمل می کنیم:

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

در این حالت کاربر می تواند هنگام ذخیره سازی علاوه بر مسیر و نام فایل، فرمت ذخیره شدن عکس را نیز تعیین نماید.

چرخش تصویر:
می خواهیم گزینه ای اضافه کنیم که با استفاده از متدهای موجود در کلاس گرافیکی C# آن را به اندازه زاویه دلخواه چرخش دهد ابتدا تابعی می نویسیم که عکس و زاویه را به عنوان ورودی از کاربر بگیرد و عکس تغییر یافته را برای ما برگرداند، برای این کار لازم است ما یک نوع Bitmap و یک شی گرافیکی تعریف کنیم:

Bitmap returnBitmap = new Bitmap(b.Width, b.Height);

 حال برای اینکه بخواهیم با +GDI تصویری را که از قبل وجود داشته نمایش دهیم لازم است از متد FromFile  برای لود کردن تصویر استفاده کنیم، سپس با استفاده از دستور:

g.TranslateTransform((float)b.Width/2,

 

(float)b.Height / 2);

مختصات چرخش را به وسط عکس تغییر می دهیم درصورتیکه ازاین تابع استفاده نکنید شکل تصویر به صورت زیرتغییرمی کند.

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

و با استفاده از دستور g.RotateTransform(angle) عکس را به اندازه زاویه مورد نظر چرخش می دهیم:

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

در رویداد آیتم دروان نیز دستورات زیر را می نویسیم.

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

آشنایی با گرافیک در سی شارپ، جلسه چهارم
آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

 

سیاه سفید کردن عکس:
می خواهیم با استفاده توابع آماده در زبان# C در همین برنامه عکس را به صورت سیاه سفید درآورده بنابراین همانند قبل سعی می کنیم تابعی بنویسیم که یک عکس را به عنوان ورودی دریافت کند و پس از سیاه سفید کردن عکس آن را به صورت خروجی بر روی صفحه نمایش دهد.
همانند مثال قبل یک شی از نوع Bitmap و یک شی از نوع Graphics جهت استفاده از توابع Setpixel وGetpixel  ما در ابتدا تابعی می نویسم که یک عکس از نوع Bitmap به عنوان ورودی دریافت کرده و پس ازGetpixel  کردن و جمع مقادیر R ,G,B رنگ دریافتی از این دستور آن را داخل یک نوع Bitmap که ایجاد کرده ایمSetpixel  می کنیم. 

آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

آشنایی با گرافیک در سی شارپ، جلسه چهارم
آشنایی با گرافیک در سی شارپ، جلسه چهارم

 

نکته: منابع حافظه در دات نت را به دو دسته می توان تقسیم کرد:
- مدیریت شده که توسط خود دات نت انجام می شود ویکی ازبرتری های این پلت فرم می باشد
- مدیریت نشده یعنی اگرشما آن را از حافظه کامپیوترپاک نکنید حافظه زیادی برای شما اشغال می شود عموما دراستفاده از تصاویرفضای حافظه ای زیادی را اشغال می کند وبرای آزاد سازی کدهای مدیریت نشده استفاده از تابع Dispose به صورت فوق می باشد.

شما عزیزان می توانید برای انجام این پروژه به طرح درس های ذیل مراجعه فرمایید:
آشنایی با گرافیک در سی شارپ، جلسه اول
آشنایی با گرافیک در سی شارپ، جلسه دوم
آشنایی با گرافیک در سی شارپ، جلسه سوم
آشنایی با گرافیک در سی شارپ، جلسه چهارم


بخش پژوهش های دانش آموزی تبیان، تهیه: محسن نصرتی

تنظیم: نسرین صادقی