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

در این آموزش در ادامه آموزش قبلی تحت عنوان کار با تصاویر در سی شارپ، نحوه دسترسی به اطلاعات تصویر مانند طول و عرض آن و رنگ هر پیکسل خواهیم پرداخت و به کمک این اطلاعات افکت های رنگی مانند “سیاه و سفید”، “تقویت رنگ”، “معکوس سازی رنگ” و… بر روی عکس اعمال خواهیم کرد. برای اینکار باید عکس مورد نظر را بعد از بارگذاری، به ساختار Bitmap تبدیل کنیم. ساختار Bitmap در واقع متناسب با سایز عکس، یک ماتریس می‌سازد که هر کدام از درایه‌های آن، اطلاعات رنگی یک پیکسل است. پس در این ساختار به راحتی می‌توانیم به اطلاعات رنگی هر پیکسل دسترسی داشته باشیم. برای ساخت Bitmap می‌توان از کد زیر کمک گرفت:


Bitmap image = (Bitmap)Bitmap.FromFile("C:\image.jpg");

[divider]

بدست آوردن ابعاد عکس

در دستور بالا، Object ای به نام image ایجاد کردیم که اطلاعات عکس مورد نظر ما را در قالب Bitmap در خود جای داده است. حال برای دانستن طول و عرض عکس می‌توانیم از دستورات زیر استفاده کنیم:


int width = image.Width;

int height = image.Height;

[divider]

رنگ یک پیکسل خاص از عکس

برای بدست آوردن اطلاعات رنگ یک پیکسل از عکس از تابع GetPixel استفاده می کنیم. این تابع x و y پیکسل مورد نظر را در ورودی گرفته و در خروجی خود رنگ پیکسل مربوطه را در قالب یک شیء Color برمی گرداند. کد زیر رنگ پیکسلی که در مختصات x=20 و y=30 در شیء image قرار دارد را برمی گرداند.


Color pixColor = image.GetPixel(20,30);

[divider]

تغییر رنگ پیکسلی خاص از عکس

برای انجام اینکار از تابع SetPixel استفاده می کنیم. این تابع دو عدد x و y و یک شی از نوع Color را که حاوی رنگ دلخواه است، در ورودی می گیرد و پیکسل مربوطه را به رنگ Color در می آورد.


Color newColor = Color.FromArgb(255,128,203,83);
image.SetPixel(i, j, newColor);

[divider]

افکت “تقویت رنگ قرمز” بر روی عکس

به نمونه کد زیر دقت کنید. در این کد، به کمک حلقه‌های تکرار، اطلاعات رنگی تمام پیکسل‌های موجود در عکس را بررسی میکنیم و مقدار رنگ قرمز را در صورت امکان(اگر مقدار رنگ قرمز بیشتر از ۲۵۵ نشود)، به میزان ۴۰% افزایش می‌دهیم. در صورتی که این میزان افزایش، مقدار رنگ قرمز را بیشتر از ۲۵۵ کند، همان عدد ۲۵۵ را برای مقدار قرمز قرار می‌دهیم.

public static Bitmap RedBoost(Bitmap scrBitmap)
{
Color actulaColor;
Bitmap newBitmap = new Bitmap(scrBitmap.Width, scrBitmap.Height);
for (int i = 0; i < scrBitmap.Width; i++)
{
for (int j = 0; j < scrBitmap.Height; j++)
{
//get the pixel from the scrBitmap image
actulaColor = scrBitmap.GetPixel(i, j);
int Red = (byte)(actulaColor.R);
Red = (int)(Red*1.4);
Red = Red > 255 ? 255 : Red;
int Green = (byte)( actulaColor.G);
int Blue = (byte)(actulaColor.B);
Color newColor = Color.FromArgb(actulaColor.A, Red, Green, Blue);
newBitmap.SetPixel(i, j, newColor);
}
}
return newBitmap;
}

[divider]

نمونه‌های دیگری از افکت گذاری

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

default

negativeblackWhite

blueboostgreenboostredboostcolorboost

[divider]

موفق و پیروز باشید!
همچنین می توانید فایل اجرایی نرم افزار نوشته شده در این آموزش را دانلود نمایید:
پسورد فایل: www.myempire.ir

[button color=”blue” size=”small” link=”https://myempire.ir/wp-content/uploads/ImagesInCSharp.zip” target=”blank” ]دانلود نرم افزار[/button]

6 دیدگاه دربارهٔ «کار با تصاویر در سی شارپ (پیشرفته);

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

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