วันอังคารที่ 22 พฤศจิกายน พ.ศ. 2554

ประโยชน์ของการเขียนโปรแกรมบน Pocket PC หรือ PDA

ปัจจุบัน PDA หรือ Pocket PC เข้ามามีบทบาทในด้านธุรกิจอย่างกว้างขวาง โดยเฉพาะอย่างยิ่ง งานที่เกี่ยวข้องกับฐานข้อมูล เช่น การตรวจสอบสต็อกสินค้า, การสั่งอาหารในร้านอาหาร, การเก็บข้อมูลนอกสถานที่ และอื่นๆ อีกมาก เนื่องจากความสะดวกในการพกพา และขีดความสามารถที่เพิ่มขึ้นของอุปกรณ์ประเภทนี้

ถึงแม้ว่าช่วงสองปีหลังนี้ Tablet PC เริ่มเข้ามาได้รับความนิยมเป็นอย่างมาก แต่ด้วยขนาดและ ความสามารถเฉพาะทางบางอย่างก็ยังไม่เท่ากับ Pocket PC โดยเฉพาะการติดต่อฐานข้อมูลอย่าง MS SQL Server ซึ่งตัวระบบปฏิบัติการอย่าง Windows Mobile ยังทำได้ดีกว่าตัวอืืนๆ อยู่

และนี่คือภาพตัวอย่างของระบบสั่งอาหารผ่าน Pocket PC โดยเชื่อมโยงเข้าไปยังฐานข้อมูล SQL Server โดยผ่านระบบ LAN แบบไร้สาย ซึ่งโดยหลักการนี้สามารถนำไปพัฒนากับระบบงานอื่นๆ ได้อย่างมากมาย

วันอังคารที่ 15 กุมภาพันธ์ พ.ศ. 2554

ข้อจำกัดของ Picture Box บน Pocket PC/PDA

การเขียนโปรแกรมด้วย Visual Studio 2008 บน Pocket PC นั้นมีข้อจำกัดในหลายๆ เรื่อง อย่างหนึ่งที่พบคือขนาดของรูปที่จะนำมา Load ตอน Runtime บน PictureBox Control


ตัวอย่างเช่น ถ้าคุณใช้คำสั่ง

PictureBox1.Image = Bitmap.FromFile("ชื่อไฟล์รูปภาพ");

แล้วไฟล์รูปภาพของคุณมีขนาด Pixel มากกว่า 1,200x1,200 Pixel แล้วล่ะก็ คุณจะได้รับข้อความ Error ประมาณว่า OutofMemoryException ซึ่ง Code เดียวกันนี้ถ้าเขียนบนเครื่อง PC ก็คงไม่มีปัญหาอะไรเกิดขึ้น นี่คือตัวอย่างหนึ่งของข้อจำกัดเวลาเขียนโปรแกรมบน Pocket PC ซึ่งเป็นผลมาจากข้อจำักัดของ Compact Framework นั่นเอง

แล้วจะแก้ไขอย่างไรล่ะ? วันนี้ผมมี Function สำหรับ การย่อขนาด Pixel (ภาษา C#) แบบง่ายๆ มาให้ลองเอาไปใช้กันดูครับ ดังนี้

private void ReduceAndSaveImage(string fname)
{
string fn = fname;
Image imp = Bitmap.FromFile(fn);
float newWidth = 300; float newHeight = 300;

Bitmap newImage = new Bitmap(Convert.ToInt32(newWidth), Convert.ToInt32(newHeight));
Graphics gr = Graphics.FromImage(newImage);
gr.SmoothingMode = SmoothingMode.AntiAlias;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
gr.DrawImage(imp, new Rectangle(0, 0, Convert.ToInt32(newWidth), Convert.ToInt32(newHeight)));
imp.Dispose();
pictureBox1.Image = newImage;
System.Threading.Thread.Sleep(100);
pictureBox1.Image.Save(fn);
}


ลองเอาไปดัดแปลงใช้กันดูนะครับ ในส่วนของ NewWeight, NewHeight นั้นถ้าเพื่อนๆ ต้องการให้ย่อเป็นกี่ Pixel ก็เปลี่ยนแปลงเอาครับในตัวอย่างผมปรับให้เป็น 300 * 300 pixel ครับ

อ้อเกือบลืมบอกไปว่าให้ using System.Drawing.Drawing2D; เข้ามาก่อนด้วยนะครับ