کدنویس۲۱

کدنویس۲۱

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

کدنویس۲۱

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

کد تقویت مقدار هر رنگ در عکس با C#

سلام دوستان! امیدوارم که خوب و سلامت باشید. امروز می خواهم در ادامه این پست برایتان کد هایی برای بالا بردن مقدار رنگ قرمز در عکس، زیاد کردن مقدار سبز عکس، آبی گونه کردن عکس و در آخر هم تابعی برای تقویت رنگ عکس برایتان بگذارم.

 

 

توابع زیر برای زیاد کردن مقدار قرمز است.

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
        public Bitmap Red(Bitmap photo,double X=1.2)
        {
            Color pxcolor;
            for (int i = 0; i < photo.Width; i++)
            {
                for (int j = 0; j < photo.Height; j++)
                {
                    pxcolor = photo.GetPixel(i, j);
                    double r = pxcolor.R * X;
                    photo.SetPixel(i, j, Color.FromArgb(Convert.ToInt32(r > 255 ? 255 : r),pxcolor.G,pxcolor.B));
                }
            }
            return photo;
        }
        public Bitmap Red(string path, double X = 1.2)
        {
            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);
                    double r = pxcolor.R * X;
                    photo.SetPixel(i, j, Color.FromArgb(Convert.ToInt32(r > 255 ? 255 : r),pxcolor.G,pxcolor.B));
                }
            }
            return photo;
        }

خط 1 تعریف تابع به همراه متغیر هایش است. خط 3 متغیری از نوع Color با نام pxcolor تعریف می کند. خط  4 تا 7 حلقه های فُری(for) برای انتخاب تمام پیکسل های عکس می سازد. خط 8 متغیر pxcolor را برابر با رنگ پیکسلی در نقطه i,j قرار می دهد. خط 9 متغیری از نوع double با نام r ایجاد می کند و مقدار آن را برابر مقدار قرمز pxcolor ضرب در مقدار متغیر X قرار می دهد. خط 10 هم رنگ پیکسلی در موقعیت i,j را برابر رنگ بدست آمده در قسمت Color.FormArgb قرار می دهد. برای رنگ اوّل که رنگ قرمز است چک می کند که r از 255 بزرگ تر است یا خیر اگر بود مقدار 255 را باز می گرداند در غیر این صورت خود r را باز می گرداند و مقدار باز گردانده شده را به int32 تبدیل می کند. مقدار دوّم و سوّم را هم که سبز و آبی اند را برابر مقدار اوّلیه قرار می دهد. خط 13 هم عکس تغییر یافته را باز می گرادند.

تابع دوّم هم همانند تابع اوّلی است ولی به جای عکس آدرس فایل در یافت شده و در خط 17 به بیت مپ تبدیل می شود.

توابع اوّل و دوّم در کد زیر مربوط به سبز و توابع سوّم و چهارم مربوط به رنگ آبی هستند.

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
        public Bitmap Green(Bitmap photo, double X = 1.2)
        {
            Color pxcolor;
            for (int i = 0; i < photo.Width; i++)
            {
                for (int j = 0; j < photo.Height; j++)
                {
                    pxcolor = photo.GetPixel(i, j);
                    double g = pxcolor.G * X;
                    photo.SetPixel(i, j, Color.FromArgb(pxcolor.R, Convert.ToInt32(g > 255 ? 255 : g), pxcolor.B));
                }
            }
            return photo;
        }
        public Bitmap Green(string path, double X = 1.2)
        {
            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);
                    double g = pxcolor.G * X;
                    photo.SetPixel(i, j, Color.FromArgb(pxcolor.R,Convert.ToInt32(g > 255 ? 255 : g),pxcolor.B));
                }
            }
            return photo;
        }


        public Bitmap Blue(Bitmap photo, double X = 1.2)
        {
            Color pxcolor;
            for (int i = 0; i < photo.Width; i++)
            {
                for (int j = 0; j < photo.Height; j++)
                {
                    pxcolor = photo.GetPixel(i, j);
                    double b = pxcolor.B * X;
                    photo.SetPixel(i, j, Color.FromArgb(pxcolor.R, pxcolor.G, Convert.ToInt32(b > 255 ? 255 : b)));
                }
            }
            return photo;
        }
        public Bitmap Blue(string path, double X = 1.2)
        {
            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);
                    double b = pxcolor.B * X;
                    photo.SetPixel(i, j, Color.FromArgb(pxcolor.R, pxcolor.G, Convert.ToInt32(b > 255 ? 255 : b)));
                }
            }
            return photo;
        }

فکر نمی کنم کد های بالا نیاز به توضیح مجدد داشته باشند ولی در هر صورت اگر مشکلی داشتید در نظرات مطرح کنید.

کد زیر هم برای تقویت رنگ تصویر است. 

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
31
32
33
        public Bitmap High(string path, double X = 1.2)
        {
            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);
                    double b = pxcolor.B * X;
                    double g = pxcolor.G * X;
                    double r = pxcolor.R * X;
                    photo.SetPixel(i,j,Color.FromArgb(Convert.ToInt32(r>255?255:r),Convert.ToInt32(g>255?255:g),Convert.ToInt32(b>255?255:b)));
                }
            }
            return photo;
        }
        public Bitmap High(Bitmap photo, double X = 1.2)
        {
            Color pxcolor;
            for (int i = 0; i < photo.Width; i++)
            {
                for (int j = 0; j < photo.Height; j++)
                {
                    pxcolor = photo.GetPixel(i, j);
                    double b = pxcolor.B * X;
                    double g = pxcolor.G * X;
                    double r = pxcolor.R * X;
                    photo.SetPixel(i,j,Color.FromArgb(Convert.ToInt32(r>255?255:r),Convert.ToInt32(g>255?255:g),Convert.ToInt32(b>255?255:b)));
                }
            }
            return photo;
        }

حال خط های ملزم توضیح را شرح می دهم.

خط 1 تابع ما را به همراه متغیر های دریافتی اش تعریف می کند. خط 3 مسیر دریافت شده را در متغیری با نام photo از نوع Bitmap ذخیره می کند(آن به عکس تبدیل می کند.). خط 10 متغیری با نام b از نوع double می سازد و مقدار آن را برابر مقدار آبی پیکسل قرار می دهد؛ متغیر g و r هم همین شرایط را برای سبز و قرمز دارند.

امیدوارم خوشتان آمده باشد. با نظراتتان ما را همراهی کنید تا در پست های آینده آموزش سیاه سفید کردن و سیاه و خاکستری و سفید کردن عکس را بگذارم.

تا آموزش های دیگر خداحافظ

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