- 使用 getPixel() 方法來截取圖片每點像素,進一步得到該點 RGB 值。
- 使用 setPixel () 方法來重設圖片。
- 結合 for-loop。
- 練習一、將圖片一半斜角變成黑色。
- 練習二、指定一座標點(單位 pixel),將該點變成黑色。
##ReadMore##
練習一、
Step1. 檔案 → 新增專案 → Windows Form 應用程式 → 拉物件 Form1.cs[設計] → 撰寫 Form1.cs
Step2. 使用圖檔 lena.png
Step3. 方案總管 → 參考 → 右鍵加入參考 → 瀏灠(預設路徑) C:\Program Files (x86)\AForge.NET\Framework\Release → 加入參考
- AForge.Imaging.dll
- AForge.Imaging.Formats.dll
Step4. Windows Form 拉入需要工具:
- pictureBox × 2
- button × 4
- openFileDialog × 1
- saveFileDialog × 1
Step5. Coding
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using AForge.Imaging; using AForge.Imaging.Formats; namespace Lesson_p49 { public partial class Form1 : Form { Bitmap imgone; int[,] maR = new int[1024, 1024]; int[,] maG = new int[1024, 1024]; int[,] maB = new int[1024, 1024]; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { openFileDialog1.Filter = "所有檔案(*.*)|*.*"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { imgone = ImageDecoder.DecodeFromFile(openFileDialog1.FileName); pictureBox1.Image = imgone; } } private void button2_Click(object sender, EventArgs e) { for (int i = 1; i < imgone.Width; i++) { for (int j = 1; j < imgone.Height; j++) { Color pixelColor = imgone.GetPixel(i, j); maR[i, j] = pixelColor.R; maG[i, j] = pixelColor.G; maB[i, j] = pixelColor.B; } } } private void button3_Click(object sender, EventArgs e) { for (int i = 1; i < imgone.Width; i++) { for (int j = 1; j < imgone.Height; j++) { if (i < j) { maR[i, j] = 0; maG[i, j] = 0; maB[i, j] = 0; } Color pixelColor = Color.FromArgb(maR[i, j], maG[i, j], maB[i, j]); imgone.SetPixel(i, j, pixelColor); } } pictureBox2.Image = imgone; } private void button4_Click(object sender, EventArgs e) { saveFileDialog1.FileName = @"imgone.bmp"; saveFileDialog1.Filter = "Bitmap file (*.bmp)|*.bmp"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { imgone.Save(saveFileDialog1.FileName); } } } }
---
練習二、
Step1. 檔案 → 新增專案 → Windows Form 應用程式 → 拉物件 Form1.cs[設計] → 撰寫 Form1.cs
Step2. 方案總管 → 參考 → 右鍵加入參考 → 瀏灠(預設路徑) C:\Program Files (x86)\AForge.NET\Framework\Release → 加入參考
- AForge.Imaging.dll
- AForge.Imaging.Formats.dll
- pictureBox × 2
- button × 3
- openFileDialog × 1
- saveFileDialog × 1
- Label × 2
- textBox × 2
Step4. coding
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using AForge.Imaging.Formats; using AForge.Imaging; namespace RGBshow { public partial class Form1 : Form { Bitmap imgInput, imgone, imgtwo; int[,] maR = new int[1024, 1024]; int[,] maG = new int[1024, 1024]; int[,] maB = new int[1024, 1024]; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { openFileDialog1.Filter = "所有檔案(*.*)|*.*"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { imgone = ImageDecoder.DecodeFromFile(openFileDialog1.FileName); imgtwo = imgone; pictureBox1.Image = imgone; pictureBox2.Image = imgtwo; label4.Text = string.Format("({0} × {1})", imgone.Width, imgone.Height); } } private void button5_Click(object sender, EventArgs e) { saveFileDialog1.FileName = @"imgtwo.bmp"; saveFileDialog1.Filter = "Bitmap file (*.bmp)|*.bmp"; if (saveFileDialog1.ShowDialog() == DialogResult.OK) { imgtwo.Save(saveFileDialog1.FileName); } } private void button2_Click(object sender, EventArgs e) { //Get textBox input value int x = int.Parse(textBox1.Text); int y = int.Parse(textBox2.Text); //保存原圖像素顏色 for (int i = 1; i < imgone.Width; i++) { for (int j = 1; j < imgone.Height; j++) { Color pixelColor = imgone.GetPixel(i, j); maR[i, j] = pixelColor.R; maG[i, j] = pixelColor.G; maB[i, j] = pixelColor.B; } } //繪製單點座標(x, y) maR[x, y] = 0; maG[x, y] = 0; maB[x, y] = 0; for (int i = 1; i < imgone.Width; i++) { for (int j = 1; j < imgone.Height; j++) { Color pixelColor = Color.FromArgb(maR[i, j], maG[i, j], maB[i, j]); imgtwo.SetPixel(i, j, pixelColor); } } pictureBox2.Image = imgtwo; } private void textBox1_TextChanged(object sender, EventArgs e) { } private void textBox2_TextChanged(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { } } }
沒有留言:
張貼留言