Dev-c++ สนับสนุนการดีบักโปรแกรมภาษาซี ซีพลัสพลัส โดยมีขั้นตอนดังนี้
1. กำหนดค่าให้ linker สร้างข้อมูลการดีบัก โดยเลือกเมนู Tools/Compiler Options/Settings/Linker/Generate Debugging Information
ซึ่้งขั้นตอนนี้จะต้องทำเพียงครั้งแรกครั้งเดียวเท่านั้น
2. ทดลองสร้างโปรแกรมตัวอย่าง แล้วคลิกที่จุดที่ต้องการสร้าง Breakpoint โดยคลิกที่ขอบทางซ้ายมือ
3. คอมไพล์โปรแกรมใหม่อีกครั้ง
4. จากนั้นเลือกเมนู Debug/Run to cursor
5. ในขณะนี้จะอยู่ในกระบวนการดีบัก เราสามารถดูค่าของตัวแปรใดๆได้ หรือเปลี่ยนค่าของตัวแปร หรือกำหนดนิพจน์ใหม่ได้ ในที่นี้เราจะลองดูค่าของตัวแปรโดยการเลื่อนเมาส์ไปวางที่ตัวแปรที่สนใจในโปรแกรม ซึ่ง Dev-c++ จะ Add watch ชื่อตัวแปรนี้โดยอัตโนมัติ
6. จากนั้นเราสามารถเลือก Debug/Next step เพื่อดีบักแต่ละขั้นตอนของโปรแกรม พร้อมๆกันดูค่าของตัวแปรที่สนใจได้
7. สามารถหยุดการดีบัก โดยเลือกเมนู Debug/Stop execution
วันอังคารที่ ๒๐ ตุลาคม พ.ศ. ๒๕๕๒
วันเสาร์ที่ ๒๑ มิถุนายน พ.ศ. ๒๕๕๑
Image Processing ด้วย C# 2
คราวนี้เราจะลองมาดูวิธีการเข้าถึง pixel ของรูปบ้าง ซึ่งโดยทั่วไปมีสามวิธีคือ
เป้าหมาย
สร้างฟังก์ชันในการกลับสี (Invert, Negative)
เมื่อ Invert เสร็จ
หลักการ
การ Invert ก็คือการนำค่าสูงสุดของสี มาหักลบด้วยค่าของ pixel นั้น เช่น
p = 255 - p
รหัสโปรแกรมก็จะเป็นประมาณนี้ครับ
เสร็จแล้วครับ หากจะเรียกใช้งานฟังก์ชันนี้จากฟอร์มหลัก อย่าลืมใช้คำสั่ง this.Invalidate() เพื่อให้ฟอร์มรีเฟรชด้วยนะครับ
- ใช้ฟังก์ชัน 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() เพื่อให้ฟอร์มรีเฟรชด้วยนะครับ
วันศุกร์ที่ ๒๐ มิถุนายน พ.ศ. ๒๕๕๑
Image Processing ด้วย C# 1
ในบทแรกนี้เราจะทำการเปิดไฟล์ภาพแล้วแสดงผล
เป้าหมาย
ขั้นตอน
สมมติว่าเราสร้างเมนูเรียบร้อยแล้ว
1. ประกาศตัวแปรสำหรับเก็บภาพ เป็นตัวแปรคลาส
private Bitmap bmp;
2. ในส่วนของเมนู Open ให้เพิ่มรหัสโปรแกรมดังนี้
3. เพิ่ม Event ชื่อ Paint ให้กับฟอร์ม
แล้วเพิ่มรหัสโปรแกรมดังนี้
เรียบร้อยแล้วครับ
เป้าหมาย
ขั้นตอน
สมมติว่าเราสร้างเมนูเรียบร้อยแล้ว
1. ประกาศตัวแปรสำหรับเก็บภาพ เป็นตัวแปรคลาส
private Bitmap bmp;
2. ในส่วนของเมนู Open ให้เพิ่มรหัสโปรแกรมดังนี้
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
//Call open dialog
OpenFileDialog openFileDialog = new OpenFileDialog();
// Default Initial directory
openFileDialog.InitialDirectory = "c:\\";
// File type filter
openFileDialog.Filter = "Bitmap files (*.bmp)|*.bmp|Jpeg files (*.jpg)|*.jpg|PNG files (*.png)|*.png|All valid files (*.bmp/*.jpg/*.png)|*.bmp/*.jpg/*.png";
// Set png to be a default format
openFileDialog.FilterIndex = 3;
openFileDialog.RestoreDirectory = true;
// if click OK to open image
if (DialogResult.OK == openFileDialog.ShowDialog())
{
// Load bitmap from file
bmp = (Bitmap)Bitmap.FromFile(openFileDialog.FileName, false);
// set width and height of form, compensate for menubar
this.Width = bmp.Width + 5;
this.Height = bmp.Height + 55;
// invoke paint method
this.Invalidate();
}
}
3. เพิ่ม Event ชื่อ Paint ให้กับฟอร์ม
แล้วเพิ่มรหัสโปรแกรมดังนี้
private void Form1_Paint(object sender, PaintEventArgs e)
{
// if image file does not exist
if (bmp == null)
return;
// else draw image to form
Graphics g = e.Graphics;
Rectangle r = new Rectangle(0, 25, bmp.Width, bmp.Height);
g.DrawImage(bmp, r);
}
เรียบร้อยแล้วครับ
สมัครสมาชิก:
บทความ (Atom)