Avatarr

image

May 23rd, 2012
247
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.99 KB | None | 0 0
  1. มี 2 class กับ RGB Function
  2.  
  3. /*
  4.  * To change this template, choose Tools | Templates
  5.  * and open the template in the editor.
  6.  */
  7. package image2d;
  8.  
  9. import java.awt.Color;
  10. import java.awt.Dimension;
  11. import java.awt.Graphics;
  12. import java.awt.image.BufferedImage;
  13. import java.io.File;
  14. import javax.imageio.ImageIO;
  15. import javax.swing.JFrame;
  16. import javax.swing.JPanel;
  17. import javax.swing.SwingUtilities;
  18.  
  19. public class Image2D {
  20.  
  21.     static BufferedImage image;
  22.  
  23.     public static Color[][] convolution(double kernel[][], int wigth, int height, int sizeKernel, int kernelXY) {
  24.  
  25.         int r = 0, g = 0, b = 0;
  26.         RGB c = new RGB();
  27.         int pixels[][] = new int[wigth][height]; // contian a pixels
  28.         Color output[][] = new Color[image.getWidth()][image.getHeight()]; // use to get result for calculation
  29.  
  30.         for (int i = 0; i < height; i++) {
  31.             for (int j = 0; j < wigth; j++) {
  32.                 pixels[j][i] = image.getRGB(j, i); // get RGB
  33.                 // calculate image -------------------------------------------
  34.                 for (int k = 0; k < sizeKernel; k++) {
  35.                     int x = sizeKernel - 1 - k;
  36.                     for (int l = 0; l < sizeKernel; l++) {
  37.                         int y = sizeKernel - 1 - l;
  38.                         int xloc = i + (k - kernelXY);
  39.                         int yloc = j + (l - kernelXY);
  40.                         if (xloc >= 0 && xloc < i && yloc >= 0 && yloc < j) {
  41.  
  42.                             r += c.red(pixels, xloc, yloc) * kernel[x][y]; // calculate a RED and call red method
  43.                             g += c.green(pixels, xloc, yloc) * kernel[x][y]; // calculate a GREEN and call green method
  44.                             b += c.blue(pixels, xloc, yloc) * kernel[x][y]; // calculate a BLUE and call blue method
  45.                             output[i][j] = new Color(r, g, b); // set RGB prepare to convert to image
  46.  
  47.                         }
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.         return output;
  53.  
  54.     }
  55.  
  56.     public static Color[][] gaussianFillter(BufferedImage img) {
  57.         double gaussian[][] = {
  58.             {1, 2, 1},
  59.             {2,4,2},
  60.             {1, 2, 1}
  61.         };
  62.         int wight = img.getWidth();
  63.         int heigth = img.getHeight();
  64.         int kernelSize = gaussian.length;
  65.         int kernelXY = kernelSize / 2;
  66.         Color result[][] = new Color[wight][heigth];
  67.  
  68.         result = convolution(gaussian, wight, heigth, kernelSize, kernelXY);
  69.         return result;
  70.     }
  71.  
  72.     public static BufferedImage loadImage(String url) {
  73.  
  74.         try {
  75.             image = ImageIO.read(new File(url));
  76.  
  77.         } catch (Exception e) {
  78.             System.out.println(e.getMessage());
  79.         }
  80.         return image;
  81.     }
  82.  
  83.     private static void createAndShowGUI() {
  84.         final JFrame frame = new JFrame("Show Result");
  85.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  86.  
  87.         final JPanel panel = new JPanel() {
  88.  
  89.             @Override
  90.             protected void paintComponent(Graphics g) {
  91.                 Graphics g2 = g.create();
  92.                 g2.drawImage(image, 0, 0, null);
  93.                 g2.dispose();
  94.             }
  95.  
  96.             @Override
  97.             public Dimension getPreferredSize() {
  98.                 return new Dimension(image.getWidth(), image.getHeight());
  99.             }
  100.         };
  101.  
  102.         frame.add(panel);
  103.         frame.pack();
  104.         frame.setLocationRelativeTo(null);
  105.         frame.setVisible(true);
  106.  
  107.     }
  108.  
  109.     public static void main(String[] args) {
  110.         Image2D obj = new Image2D();
  111.         String url = "E:\\งาน\\Java Project&Web\\Image2D\\src\\image2d\\test.jpg";
  112.         // load image and call filter function
  113.        
  114.         try {
  115.              loadImage(url);
  116.              Color col[][] = gaussianFillter(image);
  117.             for (int i = 0; i < image.getWidth(); i++) {
  118.                 for (int j = 0; j < image.getHeight(); j++) {
  119.                     System.out.println(col[i][j].getRed());
  120.                     System.out.println(col[i][j].getGreen());
  121.                     System.out.println(col[i][j].getBlue());
  122.                 }
  123.             }
  124.         } catch (Exception e) {
  125.             System.out.println(e.getMessage());
  126.         }
  127.  
  128.  
  129.         /*
  130.          * *
  131.          * try { SwingUtilities.invokeLater(new Runnable() {
  132.          *
  133.          * @Override public void run() {
  134.          *
  135.          * createAndShowGUI(); } }); } catch (Exception e) {
  136.          * System.out.println(e.getMessage()); }
  137.          */
  138.  
  139.     }
  140. }
  141.  
  142. ------------------------------------- RDD GREEN BLUE Function------------------------------------
  143.  
  144. public class RGB{
  145.  
  146.     public int red(int pi[][] , int x ,int y){
  147.         int r = 0;
  148.         r = (pi[x][y] >> 16) & 0xff;
  149.         return r;
  150.     }
  151.  
  152.     public int red(int pi[][] , int x ,int y){
  153.         int g = 0;
  154.         g = (pi[x][y] >> 8) & 0xff;
  155.         return g;
  156.     }
  157.  
  158.     public int red(int pi[][] , int x ,int y){
  159.         int b = 0;
  160.         b = (pi[x][y]) & 0xff;
  161.         return b;
  162.     }
  163. }
Advertisement
Add Comment
Please, Sign In to add comment