C#圖片的簡單處理(1)—亮度調整
我們可以這樣理解電腦上的圖片:一個矩陣,它的每個元素都是一個表示RGB的六位十六進位數。所謂RGB,就是Red、Green、Blue——光的三原色R、G、B分別用六位中的兩位十六進位數來表示。
而圖片亮度的調整,實際上是對圖片每個像素的顏色做調整。所以我想:如果把圖片每個像素的RGB都加上相同的值,是否能實現亮度的調整?比起Java,我更喜歡C#。Microsoft的Visual Studio的控制項讓我們可以像畫圖工具那樣在窗體上直接繪製組件,我可以把精力放在更核心的地方,不像Java,要麼嵌套一個又一個的Layout,要麼自己一個個地確定每個控制項的長高和xy坐標——反正要寫長長一段簡單枯燥的代碼。而且,Java的運行方式決定了我們沒法使用Java在妹子面前裝逼——大多數妹子不會在自己電腦上安裝Java虛擬機,也不懂得如何運行一個Java程序。而Windows在每個系統上都預裝了.net,所以C#不會遇到這個問題。在C#中,我們通過Bitmap類來實現對每個像素的操作。我們要先在窗體上繪製一個pictureBox來存放我們要操作的圖片。然後,我們再用這個pictureBox裡面的圖片來實例化我們的Bitmap類。Bitmap picture = new Bitmap(pictureBox1.Image);
Color pixColor = picture.GetPixel(x, y);
Color newPixColor = Color.FromArgb(R, G, B);
byte R, G, B;
R = (byte)(pixColor.R + changeValue); G = (byte)(pixColor.G + changeValue); B = (byte)(pixColor.B + changeValue);
但是,直接這樣寫有個問題:R、G、B的值是一個Byte類型的數據,當它們加上changeValue時,有可能超過Byte的範圍(0~255)而引發報錯。所以在賦值之前,我們應該加個判斷。
R = (0< pixColor.R + changeValue && pixColor.R + changeValue < 255) ? (byte)(pixColor.R + changeValue) : pixColor.R;G = (0< pixColor.G + changeValue && pixColor.G + changeValue < 255) ? (byte)(pixColor.G + changeValue) : pixColor.G;B = (0< pixColor.B + changeValue && pixColor.B + changeValue < 255) ? (byte)(pixColor.B + changeValue) : pixColor.B;
然後,我們再通過Bitmap的SetPixel方法把像素設置為新的顏色就可以了~~
picture.SetPixel(x, y, newPixColor);
Bitmap picture = new Bitmap(pictureBox1.Image); for (short x = 0; x < picture.Width; x++) { for (short y = 0; y < picture.Height; y++) { Color pixColor = picture.GetPixel(x, y); byte R, G, B; R = (0< pixColor.R + changeValue && pixColor.R + changeValue < 255) ? (byte)(pixColor.R + changeValue) : pixColor.R; G = (0< pixColor.G + changeValue && pixColor.G + changeValue < 255) ? (byte)(pixColor.G + changeValue) : pixColor.G; B = (0< pixColor.B + changeValue && pixColor.B + changeValue < 255) ? (byte)(pixColor.B + changeValue) : pixColor.B; Color newPixColor = Color.FromArgb(R, G, B); picture.SetPixel(x, y, newPixColor); } } pictureBox1.Image = picture;
推薦閱讀:
※[論文分享(一)] 水印自動去除(上)---水印的自動識別和特徵提取
※6款超級少女心的p圖軟體推薦
※想要照片更文藝,試試這款 APP
※圖偵工作流程——北京明景科技
※我的前世青年照怎麼玩?