วันอังคารที่ 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; เข้ามาก่อนด้วยนะครับ


ไม่มีความคิดเห็น:

บทความที่เกี่ยวข้อง