ตัวอย่างเช่น ถ้าคุณใช้คำสั่ง
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; เข้ามาก่อนด้วยนะครับ
ไม่มีความคิดเห็น:
แสดงความคิดเห็น