C# - Image Type Conversion

Posted by ေတဇာလင္း Thursday 19 January 2017 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား အားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Visual Studio C# ကို အသံုးျပဳၿပီး Image Type တစ္ခုကေနၿပီး အျခား Image Type တစ္ခုကို ဘရ္လို ေျပာင္းလဲႏိုင္မလဲဆိုတာေလးကို ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။ က်ေနာ့္ ေလ့က်င့္ခန္းေတြက စတင္ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္လို႔ သိၿပီးသားသူေတြအတြက္ နားလည္ေပးၾကဖို႔ ႀကိဳတင္ေတာင္းပန္ထားပါရေစဗ်ာ။ ဒီေန႔ ေလ့က်င့္ခန္းမွာေတာ့ က်ေနာ္ Button (၂)ခုနဲ႔ PictureBox (၁)ခုကို အသံုးျပဳထားပါတရ္။ Tools ေတြရဲ႕ Properties ေတြကိုေတာ့ ေအာက္ပါ Table အတိုင္း ျပင္ယူလိုက္ၾကပါဗ်ာ။
PictureBox အတြင္းသို႔ Image ဆြဲတင္ျခင္းအပိုင္းကိုေတာ့ ေရွ႕သင္ခန္းစာမွာ ေလ့လာခဲ့ၿပီးျဖစ္ပါတရ္။ ယခု ေလ့က်င့္ခန္းမွာေတာ့ မိတ္ေဆြ ဆြဲတင္ထားတဲ့ Image ကို မိမိစိတ္ႀကိဳက္ Type ေျပာင္းၿပီး ျပန္လည္ Save ယူတဲ့ ပံုစံကို ေလ့လာၾကည့္မွာပါ။ GUI ပံုစံကိုေတာ့ ေအာက္ကပံုမွာ ၾကည့္ႏိုင္ပါတရ္။
Image ကို Save တဲ့အခါမွာေတာ့ က်ေနာ္ SaveFileDialog ကိုသံုးထားပါတရ္။ မိတ္ေဆြအေနနဲ႔ မိမိႏွစ္သက္ရာ Path/Location နဲ႔ Type ကို ေရြးေပးၿပီး Image Type ကို ေျပာင္းလဲ Save လုပ္ႏိုင္မွာျဖစ္ပါတရ္။ ပံု(၂)ကိုၾကည့္ပါ။
မိတ္ေဆြတို႔ ေသခ်ာနားလည္သြားေအာင္ Coding အျပည့္အစံုကို က်ေနာ္ ေအာက္မွာ ေဖာ္ျပေပးလိုက္ပါတရ္။
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Imaging;
using System.IO;

namespace ImgProcessing
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
        }

        private void btnLoadImage_Click(object sender, EventArgs e)
        {
            LoadPicture(picOriginalImg);
        }

        public void LoadPicture(PictureBox pic)
        {
            OpenFileDialog openFD = new OpenFileDialog();
            openFD.Title = "Insert an Image";
            openFD.Filter = "JPEG Images|*.jpg|PNG Images |*.png";
            if (openFD.ShowDialog() == DialogResult.OK) {
                pic.Image = Image.FromFile(openFD.FileName);
            }
        }  

        private void btnChangeImgType_Click(object sender, EventArgs e)
        {
            ChangeImageType(picOriginalImg.Image);             
        }

        public void ChangeImageType(Image img)
        {
            SaveFileDialog saveFD = new SaveFileDialog();
            saveFD.Title = "Save an Image";
            saveFD.Filter = "Bitmap(*.bmp)|*.Bmp|Joint Photographic Experts Group(*.jpeg)|*.Jpeg|Portable Network Graphics(*.png)|*.Png|
                                   Tagged Image File Format(*.tiff)|*.Tiff|Graphics Interchange Format(*.gif)|*.Gif";

            if (saveFD.ShowDialog() == DialogResult.OK) {
                FileStream fileLocation = (FileStream)saveFD.OpenFile();
                switch (saveFD.FilterIndex) {
                    case 1: img.Save(fileLocation, ImageFormat.Bmp); break;
                    case 2: img.Save(fileLocation, ImageFormat.Jpeg); break;
                    case 3: img.Save(fileLocation, ImageFormat.Png); break;
                    case 4: img.Save(fileLocation, ImageFormat.Tiff); break;
                    case 5: img.Save(fileLocation, ImageFormat.Gif); break;
                }
            }          
        }
    }
}
နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ယံုၾကည္ပါတရ္ဗ်။ ဒီေလ့က်င့္ခန္းမွာေတာ့ ChangeImageType( ) ကို Method ခြဲေရးၿပီး Image ကို Parameter Passing လုပ္ထားပါတရ္။ SaveFileDialog သံုးတာကလည္း ေရွ႕ေလ့က်င့္ခန္းမွာ ေလ့လာခဲ့ၿပီးျဖစ္တဲ့ OpenFileDialog သံုးတာနဲ႔ အတူတူပါပဲ။ ေျပာင္းလဲလို႔ရမရ္႕ Image Type ေတြကိုေတာ့ Filter မွာ ထည့္ေပးထားပါတရ္။ ဒီ Filter ကို ေအာက္မွာ Index ခြဲၿပီးျပန္ေခၚသံုးထားတာပါ။ ဒီအတြက္ FilterIndex ဆိုတဲ့ Properties ကို အသံုးျပဳထားပါတရ္။ ပထမဆံုး Index က 1 ျဖစ္ၿပီး 1 တိုးကာ N ႀကိမ္ေျမာက္အထိ ထည့္သြင္းႏိုင္ပါတရ္ဗ်။ မိတ္ေဆြတို႔ ေရြးခ်ယ္လိုက္တဲ့ FilterIndex အေပၚမူတည္ၿပီး Image ကို Type ေျပာင္းၿပီး Save ေပးသြားမွာပါ။ က်ေနာ္ Switch() statement ကို အသံုးျပဳထားပါတရ္။ ဒီမွာ FileStream နဲ႔ OpenFile() ေခၚသံုးထားတာကေတာ့ SaveFileDialog ကေရြးခ်ယ္ေပးလိုက္တဲ့ Path/Location ကိုဖမ္းခ်င္လို႔ပါ။ Coding ေတြက အခက္ခဲႀကီးေတြ မဟုတ္လို႔ ဒီေလာက္ဆုိရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ Image Type Conversion အေၾကာင္းေလးကို နားလည္ၾကမရ္လို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment