C# - Get Image Information by Image Type

Posted by ေတဇာလင္း Friday 20 January 2017 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ား အားလံုးပဲ မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ Visual Studio C# ကို အသံုးျပဳၿပီး Image တစ္ခုရဲ႕ Information(Width, Height, Type, Size)ေတြကို ဘရ္လို ထုတ္ၾကည့္ႏိုင္မလဲ ဆိုတာေလးနဲ႔ ပါတ္သတ္ၿပီး ေလ့လာၾကည့္ၾကမွာျဖစ္ပါတရ္။ က်ေနာ့္ ေလ့က်င့္ခန္းေတြက စတင္ေလ့လာသူမ်ားအတြက္သာ ရည္ရြယ္လို႔ သိၿပီးသားသူေတြအတြက္ နားလည္ေပးၾကဖို႔ ႀကိဳတင္ေတာင္းပန္ထားပါရေစဗ်ာ။ ေလ့က်င့္ခန္းေတြကေတာ့ အခန္းဆက္ ပံုစံမ်ိဳးျဖစ္ေနလို႔ ေရွ႕အပိုင္းေတြမွာ သံုးခဲ့တာေလးေတြပါ ျပန္လည္အသံုးျပဳသြားမွာျဖစ္ပါတရ္။ ဒါေၾကာင့္ ေရွ႕သင္ခန္းစာရဲ႕ GUI မွာပဲ က်ေနာ္တို႔ လိုအပ္တဲ့ Tool ေလးေတြကို ထပ္ျဖည့္ၿပီး ေလ့လာၾကည့္ၾကပါ့မရ္။ ဒီေန႔ ေလ့က်င့္ခန္းအတြက္ က်ေနာ္ Button (၁)ခုနဲ႔ Label (4)ခုကို အသံုးျပဳထားပါတရ္။ Tools ေတြရဲ႕ Properties ေတြကိုေတာ့ ေအာက္ပါ Table အတိုင္း ျပင္ယူလိုက္ၾကပါဗ်ာ။
PictureBox အတြင္းသို႔ Image ဆြဲတင္ျခင္းအပိုင္းကိုေတာ့ ေရွ႕သင္ခန္းစာျဖစ္တဲ့ C# - Image Loading to PictureBox သင္ခန္းစာမွာ ေလ့လာခဲ့ၿပီးျဖစ္ပါတရ္။ ဒါေၾကာင့္ Image ဆြဲတင္တဲ့ coding ေတြကို က်ေနာ္ မရွင္းေတာ့ပါဘူး။ ယခု ေလ့က်င့္ခန္းမွာေတာ့ မိတ္ေဆြ ဆြဲတင္ထားတဲ့ Image ဟာ Width ဘရ္ေလာက္၊ Height ဘရ္ေလာက္၊ ဘာ Type အမ်ိဳးအစားလဲ၊ Size ဘရ္ေလာက္ရွိလဲ အစရွိတဲ့ Information ေတြကို ထုတ္ၾကည့္မွာျဖစ္ပါတရ္။ GUI ပံုစံကိုေတာ့ ေအာက္ကပံုမွာ ၾကည့္ႏိုင္ပါတရ္။
ပံုမွန္အားျဖင့္ဆိုရင္ File (or) Image ေတြရဲ႕ Information ေတြ ထုတ္ၾကည့္တဲ့အခါမွာ File (or) Image ရဲ႕ Location/Path ကိုေရြးေပးၿပီး FileInfo နဲ႔ ၾကည့္ၾကတာ မ်ားပါတရ္။ က်ေနာ့္လက္ရွိ သင္ခန္းစာေတြကေတာ့ Image ဘက္ကို အသားေပးထားတဲ့အတြက္ေၾကာင့္ Image Type ျဖစ္ေနတဲ့ File တနည္းအားျဖင့္ Image ပါလို႔ အတည္ျပဳၿပီးသား File ရဲ႕ Information ကိုပဲ ထုတ္ၾကည့္တဲ့ ပံုစံနဲ႔ ခ်ဥ္းကပ္ထားပါတရ္။ FileInfo လို File(txt, doc, etc)တိုင္းရဲ႕ Information ကိုေတာ့ ၾကည့္ႏိုင္မွာမဟုတ္ပါဘူး။ အားသာခ်က္အေနနဲ႔ကေတာ့ Image ရဲ႕ Path ကို String Type နဲ႔ Static ပံုစံ အေသလမ္းေၾကာင္း ေပးစရာမလိုေတာ့ပဲ Image Type အျဖစ္ သတ္မွတ္ထားတဲ့ မည္သည့္ File ကိုမဆို Information ထုတ္ၾကည့္ႏိုင္မွာျဖစ္ပါတရ္။ PictureBox နဲ႔ ဥပမာေပးရရင္ PictureBox အတြင္းသို႔ ဆြဲတင္မရ္႕ Image ကို Physical Drives ေတြထဲက ျဖစ္ႏိုင္သလို Database လို ေနရာကလည္း ေရာက္လာႏိုင္တာကိုးဗ်။ FileInfo ကို အသံုးျပဳလို႔ Physical Drives ေတြထဲက PictureBox ကိုဆြဲတင္ရင္ File Path ကို String ပံုစံ အဆင္ေျပေပမဲ့ Database ထဲကဆြဲတင္မရ္ဆိုရင္ေတာ့ String ပံုစံ အဆင္ေျပမွာမဟုတ္ေတာ့ပါဘူးဗ်ာ။ စာနဲ႔ ေရးၿပီးရွင္းရတာေတာ့ နားလည္ရခက္ပါတရ္။ ဒါေၾကာင့္ Image Type ကိုအသံုးျပဳၿပီး Image တစ္ခုရဲ႕ Information ကို ထုတ္ၾကည့္တရ္လို႔ပဲ မွတ္ထားလိုက္ပါဗ်ာ။ Result ကို ပံု(၂)မွာၾကည့္ပါ။
မိတ္ေဆြတို႔ ေသခ်ာနားလည္သြားေအာင္ Coding အျပည့္အစံုကို က်ေနာ္ ေအာက္မွာ ေဖာ္ျပေပးလိုက္ပါတရ္။

နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ယံုၾကည္ပါတရ္ဗ်။ ဒီေလ့က်င့္ခန္းမွာေတာ့ Method မခြဲေတာ့ပဲ btnImgInfo ဆုိတဲ့ Button ရဲ႕ Click_Event မွာပဲ Coding ကိုတခါတည္းေရးထားပါတရ္။ ပထမဆံုး PictureBox ထဲမွာ ရွိတဲ့ Image ကို Image Type ထဲထည့္လိုက္ပါတရ္။ Image အျဖစ္သိၿပီဆိုရင္ေတာ့ Width နဲ႔ Height Properties ေတြကို အသံုးျပဳၿပီး Image ရဲ႕ Width နဲ႔ Height ကို ဆြဲထုတ္ပါတရ္။ Type ကိုဆြဲထုတ္တဲ့ ေနရာမွာေတာ့ Image ရဲ႕ Type ေတြဟာ ImageFormat အေနနဲ႔ ရွိေနတာပါ။ က်ေနာ္တို႔ လိုခ်င္တာက String ပံုစံေလ။ ဒီေတာ့ ImageFormatConverter() ရဲ႕ ConvertToString() Method ကိုအသံုးျပဳၿပီး ImageFormat ကေနၿပီး String အျဖစ္ေျပာင္းလဲယူလုိက္တာျဖစ္ပါတရ္။ Image ရဲ႕ Size ကို သိဖို႔အတြက္ကေတာ့ Image ကို MemoryStream() ထဲမွာ ေခတၱသြား Save ေပးရပါတရ္။ MemoryStream ထဲေရာက္ၿပီဆိုရင္ေတာ့ ၄င္း Image ရဲ႕ Size/Length ကိုဖတ္လို႔ရပါၿပီ။ ဒါေပမဲ့ ဖတ္လို႔ရတဲ့ Image ရဲ႕ Size က byte အေနနဲ႔ ထြက္လာမွာပါ။ ဒါကိုမွ က်ေနာ္တို႔ ေဖာ္ျပေစခ်င္တဲ့ KB (or) MB အျဖစ္ ေျပာင္းလဲ ေဖာ္ျပေပးလိုက္တာပဲျဖစ္ပါတရ္။ 1024 နဲ႔ စားတာကေတာ့ 1024 byte မွာ 1 KB ရွိသလို၊ 1024 KB မွာ 1MB ရွိလို႔ပါ။ MB တြက္တဲ့ေနရာမွာ string.Format("{0:F2}", imgSizeKB / 1024) သံုးထားတာကေတာ့ ဒႆ မ(၂)ေနရာျဖတ္ခ်င္လို႔ပါ။ ဒႆ မ(၁)လံုးျဖတ္ခ်င္ရင္ 0:F1, ႏွစ္လံုးျဖတ္ခ်င္ရင္ 0:F2 စသည္ျဖင့္ မိမိျဖတ္ခ်င္တဲ့ ဒႆ မအေရအတြက္အတိုင္း F level ကို တိုးယူႏိုင္ပါတရ္။ Coding ေတြက အခက္ခဲႀကီးေတြ မဟုတ္လို႔ ဒီေလာက္ဆုိရင္ေတာ့ မိတ္ေဆြတို႔အေနနဲ႔ Image တစ္ခုရဲ႕ Information ေတြကို ဆြဲထုတ္ၾကည့္တတ္ၿပီလို႔ ထင္ပါတရ္ဗ်ာ။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment