2016年4月22日 星期五

[JAVA] 讀取圖片pixel並改變色階









讀取圖片裡的pixel後並做運用,利用BufferedImagegetRGBsetRGB功能就可以達成目的。


開頭先說明,如果每個pixel都直接讀取後運算再直接存進源圖片並顯示的話,會非常消耗運算效能,所以這邊先把算好的值存在另一個image,等全部算好後再一次顯示。

取得圖檔後,因為需要把RGB分開運用,所以用Color來存RGB數值。
Color color=new Color(image.getRGB(x,y));

這邊示範的是把圖片轉換成灰色階,補充一點,RGB的黑白色都是三個顏色同樣數值,例如黑色(0,0,0)、白色(255,255,255),所以這邊把三個直取出後加總除三。
int tmp=(color.getRed()+color.getGreen()+color.getBlue())/3;

接著把算好的值設定進新的Color裡,用new Color(R,G,B)來實現。
Color tmpcol=new Color(tmp,tmp,tmp);

最後把ColorRGBset進存改變後的圖片的Image就行了。
tmpIma.setRGB(x,y,tmpcol.getRGB());

以下為全部程式碼:
import java.awt.*;
import javax.swing.*;
import java.io.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
public class MyShow
{
        String Filename;
        BufferedImage image;
        BufferedImage tmpIma;
        JFrame jf;
        public static void main(String argv[])
        {
                new MyShow();
        }
        public MyShow()
        {
                LoadFile();
                ChangPix();
                SetTable();
        }
        public void LoadFile()
        {
                Filename="1.JPG";
                try
                {
                        image=ImageIO.read(new File(Filename));
                }
                catch(Exception e)
                {
                        javax.swing.JOptionPane.showMessageDialog(null, "載入圖檔錯誤: "+Filename);
                        image=null;
                }
        }
        public void ChangPix(){          
                tmpIma=new BufferedImage(image.getWidth(),image.getHeight(),BufferedImage.TYPE_INT_RGB);
                for(int i=0;i<image.getWidth();i++){
                        for(int j=0;j<image.getHeight();j++){
                                Color color=new Color(image.getRGB(i,j));
                                int tmp=(color.getRed()+color.getGreen()+color.getBlue())/3;
                                Color tmpcol=new Color(tmp,tmp,tmp);
                                tmpIma.setRGB(i,j,tmpcol.getRGB());
                        }
                }
        }
        public void SetTable()
        {
                jf = new JFrame("");
                JScrollPane scrollPane = new JScrollPane(new JLabel(new ImageIcon(tmpIma)));
                jf.getContentPane().add(scrollPane);
                jf.pack();
                jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                jf.setTitle(Filename+" "+image.getWidth()+" x "+image.getHeight());
                jf.setLocationRelativeTo(null);
                jf.setVisible(true);
        }

}


如果您喜歡我的文章,請在文章最末按5下Like!
我將得到LikeCoin的回饋:)

回饋由LikeCoin基金會出資,您只要註冊/登入帳號(FB、Google帳號都可以註冊,流程超快),按L五次左鍵,可以贊助我的文章且完全不會花到錢!
支持創作,正向交流:)

沒有留言:

張貼留言