{"id":75,"date":"2023-10-25T00:08:11","date_gmt":"2023-10-24T21:08:11","guid":{"rendered":"http:\/\/www.cuneytbayrak.com\/?p=75"},"modified":"2025-02-21T00:56:24","modified_gmt":"2025-02-20T21:56:24","slug":"image-nesnelerini-grayscale-ve-monochrome-yapma","status":"publish","type":"post","link":"http:\/\/www.cuneytbayrak.com\/?p=75","title":{"rendered":"Image Nesnelerini Grayscale ve Monochrome Yapma"},"content":{"rendered":"<p>Image nesneleri pixellerden olu\u015fur. Her bir pixeli kalemle ka\u011f\u0131da konulan bir nokta gibi d\u00fc\u015f\u00fcnebilirsiniz. Image nesnesi t\u00fcm bu noktalar\u0131n olu\u015fturdu\u011fu bir g\u00f6rsel sunar bize.<\/p>\n<p>Burada bilinmesi gereken en \u00f6nemli husus, her bir noktan\u0131n (pixelin) \u00fc\u00e7 katmanl\u0131 bir yap\u0131s\u0131n\u0131n oldu\u011fu. Her bir pixel \u00fc\u00e7 renk kombinasyonunun bile\u015fiminden olu\u015fur.<\/p>\n<p>Bu renkler K\u0131rm\u0131z\u0131, Ye\u015fil ve Mavi\u2019dir. Yani her bir pixel biraz k\u0131rm\u0131z\u0131 (R(red)), biraz ye\u015fil (G(green)) ve biraz da mavi (B(blue)) renk i\u00e7erir.<\/p>\n<p>Buradan hareketle image nesnesinin her bir pixelinde RGB renk kombinasyonun say\u0131sal bir de\u011feri bulunmaktad\u0131r. Bu say\u0131sal de\u011fer her bir renk katman\u0131 i\u00e7in 1 byte l\u0131k veriyi saklar.<\/p>\n<p>Yani her bir renk 8 bitlik bir veri ile temsil edilir. Onluk sistemde\u00a0 2^8 = 256 adet veri demek bu . Yani her bir renk 0-255 aral\u0131\u011f\u0131nda bir say\u0131sal de\u011fer ile temsil edilmektedir.<\/p>\n<p>Demek ki her bir pixelin RGB de\u011ferleri 0-255 aral\u0131\u011f\u0131nda bir de\u011fer alarak o pixelin hangi renk kombinasyonunda g\u00f6r\u00fcnece\u011fini belirler.<\/p>\n<p>Kalemle ka\u011f\u0131da nokta koyma \u00f6rne\u011fini vermi\u015ftik. Bu \u00f6rnekten hareketle kalemimizi k\u0131rm\u0131z\u0131 (R), ye\u015fil (G) ve mavi (B) boyam\u0131za tek tek bat\u0131r\u0131yoruz ve ortaya yeni bir renk kar\u0131\u015f\u0131m\u0131 elde ediyoruz ve bu yeni renk kar\u0131\u015f\u0131m\u0131n\u0131 ka\u011f\u0131d\u0131m\u0131za noktal\u0131yoruz. Bunu yaparken de K\u0131rm\u0131z\u0131, Ye\u015fil ve Mavi boyalar\u0131m\u0131zdan da belli oranlarda faydalan\u0131yoruz. Mesela; 25 tane K\u0131rm\u0131z\u0131 , 140 tane Ye\u015fil ve 56 tane de Mavi olsun diyoruz. RGB(25,140,56) olmu\u015f oldu. (Burada tane birimini anla\u015f\u0131ls\u0131n diye kulland\u0131m.) Kalemimizin ucunda RGB(25,140,56) kombinasyonlu yeni bir boya var art\u0131k. Ka\u011f\u0131d\u0131m\u0131z\u0131n neresini noktalayaca\u011f\u0131m\u0131za g\u00f6re Image nesnesi \u015fekil alacakt\u0131r.<\/p>\n<p>Image nesnelerin boyutu ka\u00e7 pixele ka\u00e7 pixel olarak de\u011ferlendirilir. \u00d6rne\u011fin 580\u00d7640 pixel demek, yatayda 580 adet pixel dikeyde ise 640 adet pixel var demektir. Yani 580\u00d7640=371.200 adet pixelden olu\u015fuyor bu Image. Bu 371.200 adet her bir pixelin i\u00e7inde de RGB renklerinin say\u0131sal de\u011ferleri var.<\/p>\n<p>San\u0131r\u0131m konu anla\u015f\u0131ld\u0131 biraz.<\/p>\n<p>Herhangi bir programlama dili ile Image nesnelerinin pixellerine eri\u015febiliyoruz ve eri\u015fmekle kalmay\u0131p bu pixellerin RGB de\u011ferlerini de manip\u00fcle edebiliyoruz.<\/p>\n<p>Bunu yapabiliyor olmak bize, Image nesneleri \u00fczerinde istedi\u011fimiz de\u011fi\u015fiklikleri yapmam\u0131za olanak sa\u011fl\u0131yor.<\/p>\n<p>Bu yaz\u0131da C# programlama dili kullanarak bir Image nesnesi nas\u0131l Grayscale(siyah-beyaz kar\u0131\u015f\u0131k) d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr ve daha sonra nas\u0131l Monochrome(ya siyah ya beyaz) yap\u0131l\u0131r onun kodlar\u0131n\u0131 payla\u015faca\u011f\u0131m.<\/p>\n<p>Grayscale yapmak i\u00e7in iki etkili y\u00f6ntem var. Bunlardan birincisi Average Method denilen ortlama alma metodu, di\u011feri ise Luminosity Method denilen, Average methoda g\u00f6re daha parlak bir grayscale elde etmemize olanak sa\u011flayan metod. Ben\u00a0 Luminosity Method\u2019u tercih ettim.<\/p>\n<ol>\n<li>Average Method: Grayscale= (R+G+B)\/3<\/li>\n<li>Luminosity Method: Grayscale=0.3*R+0.59*G+0.11*B<\/li>\n<\/ol>\n<p>Monochrome yapmak i\u00e7in ise bir ko\u015ful kulland\u0131m. 0-255 aral\u0131\u011f\u0131nda ki her bir RGB de\u011ferlerinin 0-128 de\u011fere sahip olanlar\u0131n\u0131 0 yap, 129-255 de\u011fere sahip olanlar\u0131 255 yap.<\/p>\n<p>Bunu yaparak art\u0131k Image nesnemde ki herbir pixelin RGB de\u011feri ya 0 yada 255 olmu\u015f oldu. Yani Monochrome oldu. Monochrome kelime anlam\u0131 olarak eski yunancada mono:tek chrome:renk anlam\u0131nda tek renkli demek zaten.<\/p>\n<p>Kodlar \u015fu \u015fekilde:<\/p>\n<div class=\"wp-block-codemirror-blocks code-block \">\n<pre class=\"CodeMirror\" data-setting=\"{&quot;mode&quot;:&quot;clike&quot;,&quot;mime&quot;:&quot;text\/x-csharp&quot;,&quot;theme&quot;:&quot;material&quot;,&quot;lineNumbers&quot;:true,&quot;lineWrapping&quot;:false,&quot;styleActiveLine&quot;:false,&quot;readOnly&quot;:true,&quot;align&quot;:&quot;&quot;}\">using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.Data;\r\nusing System.Drawing;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Forms;\r\nusing System.Diagnostics;\r\nusing System.Drawing.Imaging;\r\n \r\nnamespace WindowsFormsApp16\r\n{\r\npublic partial class Form1 : Form\r\n{\r\npublic Form1()\r\n{\r\nInitializeComponent();\r\n}\r\n \r\nprivate void button1_Click(object sender, EventArgs e)\r\n{\r\nOpenFileDialog dosya = new OpenFileDialog();\r\n \r\ndosya.Filter = \"G\u00f6r\u00fcnt\u00fc Dosyas\u0131 |*.jpg| G\u00f6r\u00fcnt\u00fc Dosyas\u0131|*.bmp\";\r\ndosya.FilterIndex = 1;\r\ndosya.RestoreDirectory = true;\r\ndosya.CheckFileExists = false;\r\ndosya.Title = \"Aktar\u0131m Yap\u0131lacak G\u00f6r\u00fcnt\u00fc Dosyas\u0131 Se\u00e7iniz..\";\r\ndosya.Multiselect = false;\r\nstring DosyaYolu = \"\";\r\n \r\nif (dosya.ShowDialog() == DialogResult.OK)\r\n{\r\nDosyaYolu = dosya.FileName;\r\n}\r\nelse\r\n{\r\nreturn;\r\n}\r\n \r\npictureBox1.Load(DosyaYolu);\r\npictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;\r\n \r\nlabel1.Text = pictureBox1.Image.Width.ToString() + \"x\" + pictureBox1.Image.Height.ToString();\r\n}\r\n \r\nprivate void button2_Click(object sender, EventArgs e)\r\n{\r\nStopwatch watch = new Stopwatch();\r\nwatch.Start();\r\nBitmap Resim;\r\nBitmap ResimC;\r\nint R = 0;\r\nint G = 0;\r\nint B = 0;\r\nint R2 = 0;\r\nint G2 = 0;\r\nint B2 = 0;\r\n \r\nResim = new Bitmap(pictureBox1.Image);\r\nResimC = new Bitmap(pictureBox1.Image.Width, pictureBox1.Image.Height);\r\nfor (int i = 0; i &lt; pictureBox1.Image.Width; i++)\r\n{\r\nfor (int j = 0; j &lt; pictureBox1.Image.Height; j++)\r\n{\r\nColor renk = Resim.GetPixel(i, j);\r\nR = renk.R;\r\nG = renk.G;\r\nB = renk.B;\r\n \r\n\/\/Grayscale yap\u0131yoruz\r\nR2 = Convert.ToInt32(0.3 * R + 0.59 * G + 0.11 * B);\r\nG2 = Convert.ToInt32(0.3 * R + 0.59 * G + 0.11 * B);\r\nB2 = Convert.ToInt32(0.3 * R + 0.59 * G + 0.11 * B);\r\n \r\n\/\/Grayscaleden monochrome ge\u00e7i\u015f yap\u0131yoruz\r\nR2 = R2 &lt; 128 ? 0 : 255;\r\nG2 = G2 &lt; 128 ? 0 : 255;\r\nB2 = B2 &lt; 128 ? 0 : 255;\r\nColor renkM = Color.FromArgb(R2, G2, B2);\r\nResimC.SetPixel(i, j,renkM);\r\n}\r\n}\r\n \r\npictureBox2.Image = ResimC;\r\npictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;\r\nwatch.Stop();\r\nlabel2.Text = watch.Elapsed.TotalMilliseconds.ToString() + \" ms\";\r\n}\r\n \r\nprivate void button3_Click(object sender, EventArgs e)\r\n{\r\nBitmap Resim = new Bitmap(pictureBox2.Image);\r\nSaveFileDialog dialog = new SaveFileDialog();\r\nif (dialog.ShowDialog() == DialogResult.OK)\r\n{\r\nResim.Save(dialog.FileName, ImageFormat.Jpeg);\r\n}\r\nelse\r\n{\r\nreturn;\r\n}\r\n \r\n}\r\n}\r\n}<\/pre>\n<\/div>\n<p>Kolay gele&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Image nesneleri pixellerden olu\u015fur. Her bir pixeli kalemle ka\u011f\u0131da konulan bir nokta gibi d\u00fc\u015f\u00fcnebilirsiniz. Image nesnesi t\u00fcm bu noktalar\u0131n olu\u015fturdu\u011fu bir g\u00f6rsel sunar bize. Burada bilinmesi gereken en \u00f6nemli husus,&#8230;<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"http:\/\/www.cuneytbayrak.com\/?p=75\">Devam\u0131n\u0131 Oku<span class=\"screen-reader-text\">Image Nesnelerini Grayscale ve Monochrome Yapma<\/span><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":1,"footnotes":""},"categories":[8],"tags":[22,23],"class_list":["post-75","post","type-post","status-publish","format-standard","hentry","category-sayisal-goruntu-isleme","tag-imagegrayscale","tag-imagemonochrome","excerpt"],"_links":{"self":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/75","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=75"}],"version-history":[{"count":1,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/75\/revisions"}],"predecessor-version":[{"id":76,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=\/wp\/v2\/posts\/75\/revisions\/76"}],"wp:attachment":[{"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=75"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=75"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.cuneytbayrak.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=75"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}