کدنویس۲۱

کدنویس۲۱

با کد نویس 21 کد نویس باشید.
کدنویس۲۱

کدنویس۲۱

با کد نویس 21 کد نویس باشید.

نگاتیو(negative) کردن عکس با C#

سلام دوستان امروز کلاسی با سی شارپ می نویسیم که مسیر فایل یا فایل به صورت بیت مپ را دریافت می کند.

 

 

ابتدا از وجود این کتابخانه ها اطمینان حاصل کنید.

1
2
using System;
using System.Drawing;

کلاس زیر می تواند کار هایمان را انجام دهد(در پست های بعد به آن قابلیت های بیشتری اضافه می کنیم.).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
class Photo
    {
        public Bitmap negative(Bitmap photo)
        {
            Color pxcolor;
            for (int i = 0; i < photo.Width; i++)
            {
                for (int j = 0; j < photo.Height; j++)
                {
                    pxcolor = photo.GetPixel(i, j);
                    photo.SetPixel(i, j, Color.FromArgb(255 - pxcolor.R, 255 - pxcolor.G, 255 - pxcolor.B));
                }
            }
            return photo;
        }
        public Bitmap negative(string path)
        {
            Bitmap photo = new Bitmap(path);
            Color pxcolor;
            for (int i = 0; i < photo.Width; i++)
            {
                for (int j = 0; j < photo.Height; j++)
                {
                    pxcolor = photo.GetPixel(i, j);
                    photo.SetPixel(i, j, Color.FromArgb(255 - pxcolor.R, 255 - pxcolor.G, 255 - pxcolor.B));
                }
            }
            return photo;
        }
    }

کلاس بالا دارای 2 تابع با نام negative از نوع Bitmap است که هر دو کار نگاتیو کردن را انجام می دهند ولی ورودی های متفاوت دارند تابع اول عکسی از نوع Bitmap دریافت می کند و تابع دوم مسیر عکس را می گیرد.

نکته: تابع دوّم خودش مسیر را به Bitmap تبدیل می کند ولی تابع اول Bitmap را به صورت آماده می گیرد.

خط 5 متغیری از نوع Color به نام pxcolor تعریف می کند. خط 6 یک حلقه for تعریف می کند. خط 8 هم حلقه for دیگری ایجاد می کند.

خط 10 رنگ پیکسلی در مختصات i,j را در pxcolor می ریزد. خط 11 رنگ پیکسلی در مختصات i,j را برعکس می کند. حداکثر مقدار یک رنگ 255 می باشد و اگر به کد خط 11 دقّت کنید خواهید فهمید که مقدار هر رنگ از 255 کم شده مانند:

255-120=135

255-255=0

255-0=255

همانطور که مشاهده می کنید مقدار اگر زیاد باشد کم و اگر کم باشد زیاد می شود. 127 و 128 نقاط میانی هستند.

255-127=128

255-128=127

 در نهایت رنگ تمامی خانه های عکس برعکس شده و یا به اصطلاح عکس نگاتیو می شود و از طریق کد return در خط 14 عکس باز گردانده می شود.

تابع دوم هم همین کار را می کند ولی ابتدا از طریق کد خط 18 عکس مسیر وارد شده در path را به صورت بیت مپی با نام photo ذخیره می کند و عملیات را روی آن اجرا می کند.

امیدوارم خوشتان آمده باشد با نظراتتان ما را حمایت کنید.

تا کد های دیگر عکساتون زیبا

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد