Pages

Friday, April 26, 2013

fit image to label in java- ඉමේජයක් ජාවා ලේබලයකට ගැලපෙන ලෙස සකස් කිරීම.

ජාවා පරිගණක භාෂව සමඟ කටයුතු කරන විටක ඔබට ලේබලයකට ඉමේජයක් දැමීමට අවශ්‍ය වී තිබෙන්නට පුළුවන්. මෙය Netbeans හරහා ඉතා පහසුවෙන් කර ගන්නට පුළුවන්. නමුත් ගැටළුව වන්නේ එය නොවෙයි. මේ දමන ඉමේජය ලේබලයේ ප්‍රමාණයටම විය යුතු අතර ඊට අඩු හෝ වැඩි නොවිය යුතු වීමයි.  ඉතින් මේ කුඩා ලිපියෙන් බලාපොරොත්තු වන්නේ එයට විසඳුමක් සපයා දීමටයි. පළමුවෙන්ම අපි බලමු Netbeans වලින් ලේබලයකට ඉමේජයක් add කර ගන්න ආකාරය.



පළමුවෙන්ම File>New Project ගොස් නව Project එකක් සකසා ගන්න. එහි ඔබ කැමති නමකින් jFrame form එකක් සාදා ගන්න.



පහත පරිදි එයට ලේබලයක් add කර ගන්න.
 ඉන්පසු අවශ්‍ය ඉමේජය අදාල පැකේජය තුලට කොපි පේස්ට් කර ගන්න. එවිට එම ඉමේජය project මෙනු එකේ පෙන්වනු ඇත. ඉන්පසු ලේබලය මත right click කර Edit Text ගොස් එහි ඇති Text එක මකා දමන්න. එසේ නැති නම් එම Text එක අපගේ ඉමේජයත් සමඟම දිස්වනු ඇත. ඉන්පසු ලේබලය මත right click කර Label Properties  ගොස් icon යන්නේ දකුණු පස ඇති කුඩා Button එක click කරන්න.


එවිට පහත dialog box එක open වනු ඇත. එහි අදාල පැකෙජය සිලෙක්ට් කර File යන්න සඳහා අපගේ ඉමේජය ලබා දෙන්න. Ok කර පසු ලේබලය මත ඉමේජය දිස් වනු ඇත.



මෙහිදී ලේබලයට වඩා ඉමේජය විශාල නිසා එයින් අඩක් දිස් නොවනු දක්නට ලැබෙනු ඇත. මෙයින් මිදීම සඳහා කල යුතු කාර්යය ගැන මීළඟට සලකා බලමු.

මේ සඳහා කල යුතු වන්නේ ඉමේජය ලේබලයේ ප්‍රමාණයට resize කිරීමයි. එම ලේබලයේ ප්‍රමාණය අප aspect ratio කියා හඳුන්වනවා. මෙම aspect ratio අනුවයි ලේබලය කොතරම් දුරට විශාල හෝ පොඩි කිරීමට ලක්වනවාද යන්න තීරණය වන්නේ. මේ සඳහා ඉහත පරිදි ලේබලය තුලට ඉමේජයක් add කිරීම අනවශ්‍ය බැවින් එය මම ඉවත් කර ලේබලය default තත්ත්වයට පත් කර ගන්නවා මේ ක්‍රියාවලිය සඳහා මම මුලින්ම අපගේ ඉමේජය form එකට add කිරීම සිදු කරනවා. ඉමේජය BufferedImage ලෙස සකසා ගන්න්වා. මෙම Code එක ලිවීම සඳහා මම තෝරා ගන්නේ form එකෙහි windowOpened() යන event එකයි. එය ලබා ගැනීම සඳහා අපගේ form එකෙහි design view එක තෝරා navigator යන්නෙන් jFrame මත right click කර event> window > windowOpened() select කරන්න. 
ඉන්පසු එහි පහත කේතය සටහන් කර ගන්න.

BufferedImage imgOriginal;
File f = new File("src/blogpost34/newbinary.jpg");
        try {
            imgOriginal = ImageIO.read(f);
        } catch (IOException ex) {
           
        }

මෙහිදී ඉමේජ් absolute පාත් එක දිය යුතු අතර එසේ නැතිනම් ඉහත පරිදි project name එකට සමගාමීව පාත් එක ලබා දිය යුතුය. 

ඉන්පසු නව method එකක් අප සාදා ගත් jframe form එකෙහිම සාදා ගන්නවා. ඔබට කැමති නම් එය වෙනත් class එකක් තුලද සාදා ගත හැකියි. එය setImageSizeToLable  ලෙස නම් කරමු. 

 public void setImageSizeToLable(int width, int height, JLabel label, BufferedImage img){
    if (width < height) {
                label.setIcon(new ImageIcon(img.getScaledInstance(label.getHeight() * img.getWidth() / img.getHeight(), label.getHeight(), Image.SCALE_AREA_AVERAGING)));
            } else {
                label.setIcon(new ImageIcon(img.getScaledInstance(label.getWidth(), label.getWidth() * img.getHeight() / img.getWidth(), Image.SCALE_AREA_AVERAGING)));
            }
    }

ඉන්පසු windowOpened event එකට ගොස් අප සාදාගත් method  එක invoke කිරීම කල යුතු වනවා.

 BufferedImage imgOriginal;
        File f = new File("src/blogpost34/newbinary.jpg");
        try {
            imgOriginal = ImageIO.read(f);
            setImageSizeToLable(imgOriginal.getWidth(), imgOriginal.getHeight(), jLabel1, imgOriginal);

        } catch (IOException ex) {
            System.out.println(ex);

        }

එවිට සම්පූර්ණ කේතය ඉහත පරිදි දිස් වේවි.

No comments:

Post a Comment