- ใช้ฟังก์ชัน Bitmap.GetPixel และ Bitmap.SetPixel วิธีนี้จะง่ายที่สุด แต่มีข้อจำกัดคือ ใช้ได้กับรูปที่เป็นแบบ RGB เท่านั้น และ การประมวลผลค่อนข้างช้า
- ใช้ pointer เข้าไปจัดการกับค่าของ pixel ในหน่่วยความจำโดยตรง ข้อดีคือเป็นวิธีที่เร็วที่สุด แต่ถือว่าเป็น unsafe code ก่อนคอมไพล์ต้องไปกำหนดรูปแบบให้ยอมรับ unsafe code ด้วย
- ทำการสำเนาค่าค่าของ pixel ในหน่่วยความจำ มาเก็บไว้ในตัวแปรชุด จากนั้นก็ประมวลผลค่าของ pixel ให้เสร็จเรียบร้อย จึงค่อยสำเนาค่าตัวแปรชุด กลับไปทับค่าของ pixel ในหน่่วยความจำ
เป้าหมาย
สร้างฟังก์ชันในการกลับสี (Invert, Negative)
เมื่อ Invert เสร็จ
หลักการ
การ Invert ก็คือการนำค่าสูงสุดของสี มาหักลบด้วยค่าของ pixel นั้น เช่น
p = 255 - p
รหัสโปรแกรมก็จะเป็นประมาณนี้ครับ
//*********************************
//This function uses GetPixel and SetPixel which are very easy but quite slow, and only applicable to RGB image
//*********************************
public static void InvertSlow(Bitmap bmp)
{
// Image width and height
int w = bmp.Width;
int h = bmp.Height;
// Color
Color CL1,CL2;
for (int y = 0; y < h; y++)
{
for (int x = 0; x < w; x++)
{
// get pixel color
CL1 = bmp.GetPixel(x,y);
// change to negative
CL2 = Color.FromArgb(255 - CL1.R, 255 - CL1.G, 255 - CL1.B);
// set pixel to new color
bmp.SetPixel(x, y, CL2);
}
}
}
เสร็จแล้วครับ หากจะเรียกใช้งานฟังก์ชันนี้จากฟอร์มหลัก อย่าลืมใช้คำสั่ง this.Invalidate() เพื่อให้ฟอร์มรีเฟรชด้วยนะครับ