[Java] 通过修改图片的rgb来改变图片的亮度 →→→→→进入此内容的聊天室

来自 , 2019-04-29, 写在 Java, 查看 136 次.
URL http://www.code666.cn/view/d554f7bb
  1. package com.sxt.img;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Color;
  5. import java.awt.Component;
  6. import java.awt.Graphics;
  7. import java.awt.Graphics2D;
  8. import java.awt.image.BufferedImage;
  9. import java.io.File;
  10. import java.io.IOException;
  11. import java.util.Dictionary;
  12. import java.util.Hashtable;
  13.  
  14. import javax.imageio.ImageIO;
  15. import javax.swing.Box;
  16. import javax.swing.BoxLayout;
  17. import javax.swing.JFrame;
  18. import javax.swing.JLabel;
  19. import javax.swing.JOptionPane;
  20. import javax.swing.JPanel;
  21. import javax.swing.JSlider;
  22. import javax.swing.event.ChangeEvent;
  23. import javax.swing.event.ChangeListener;
  24.  
  25. /**
  26.  * 手动实现改变图片的亮度 修改图片的rgb
  27.  *
  28.  * @author Danny
  29.  *
  30.  */
  31. public class ImageProcessDemo extends JFrame
  32. {
  33.         private JPanel panel = null;
  34.         private JSlider slider = null;
  35.         private BufferedImage img = null;
  36.         private int value = 0;
  37.  
  38.         public ImageProcessDemo()
  39.         {
  40.                 initComponent();
  41.                 this.setVisible(true);
  42.         }
  43.  
  44.         private void initComponent()
  45.         {
  46.                 this.setTitle("图片处理测试");
  47.                 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  48.                 this.setSize(500, 400);
  49.                 this.setLocationRelativeTo(null);
  50.  
  51.                 initImg(new File("a.jpg"));
  52.  
  53.                 panel = new JPanel()
  54.                 {
  55.                         @Override
  56.                         protected void paintComponent(Graphics g)
  57.                         {
  58.                                 super.paintComponent(g);
  59.                                 Graphics2D g2 = (Graphics2D) g;
  60.                                 g2.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
  61.                         }
  62.                 };
  63.  
  64.                 this.add(panel, BorderLayout.CENTER);
  65.  
  66.                 panel.setLayout(new BorderLayout());
  67.                 slider = new JSlider();
  68.                 slider.setValue(50);
  69.                 slider.setPaintLabels(true);
  70.                 slider.setPaintTicks(true);
  71.                 slider.setMajorTickSpacing(100);
  72.                 slider.setMinorTickSpacing(5);
  73.                 Dictionary<Integer, Component> labels = new Hashtable<Integer, Component>();
  74.                 for (int i = 0; i <= 100; i += 5)
  75.                 {
  76.                         labels.put(i, new JLabel("" + i));
  77.                 }
  78.                 slider.setLabelTable(labels);
  79.  
  80.                 value = slider.getValue();
  81.  
  82.                 slider.addChangeListener(new ChangeListener()
  83.                 {
  84.                         @Override
  85.                         public void stateChanged(ChangeEvent e)
  86.                         {
  87.                                 if (slider.getValueIsAdjusting())
  88.                                 {
  89.                                         int changeValue = slider.getValue() - value;
  90.                                         processImg(changeValue);
  91.                                         value = slider.getValue();
  92.                                 }
  93.                         }
  94.                 });
  95.  
  96.                 Box box = new Box(BoxLayout.X_AXIS);
  97.                 box.add(new JLabel("亮度调节:"));
  98.                 box.add(slider);
  99.                 this.add(box, BorderLayout.NORTH);
  100.         }
  101.  
  102.         private void initImg(File file)
  103.         {
  104.                 try
  105.                 {
  106.                         img = ImageIO.read(file);
  107.                 } catch (IOException e)
  108.                 {
  109.                         JOptionPane.showMessageDialog(null, "图片不存在!");
  110.                 }
  111.         }
  112.  
  113.         /**
  114.          * 处理图片
  115.          *
  116.          */
  117.         private void processImg(int changeValue)
  118.         {
  119.                 for (int x = 0; x < img.getWidth(); x++)
  120.                 {
  121.                         for (int y = 0; y < img.getHeight(); y++)
  122.                         {
  123.                                 // 获取到rgb的组合值
  124.                                 int rgb = img.getRGB(x, y);
  125.                                 Color color = new Color(rgb);
  126.                                 int r = color.getRed() + changeValue;
  127.                                 int g = color.getGreen() + changeValue;
  128.                                 int b = color.getBlue() + changeValue;
  129.                                 if (r > 255)
  130.                                 {
  131.                                         r = 255;
  132.                                 } else if (r < 0)
  133.                                 {
  134.                                         r = 0;
  135.                                 }
  136.  
  137.                                 if (g > 255)
  138.                                 {
  139.                                         g = 255;
  140.                                 } else if (g < 0)
  141.                                 {
  142.                                         g = 0;
  143.                                 }
  144.  
  145.                                 if (b > 255)
  146.                                 {
  147.                                         b = 255;
  148.                                 } else if (b < 0)
  149.                                 {
  150.                                         b = 0;
  151.                                 }
  152.  
  153.                                 color = new Color(r, g, b);
  154.                                 img.setRGB(x, y, color.getRGB());
  155.                         }
  156.                 }
  157.                 panel.repaint();
  158.         }
  159.  
  160.         public static void main(String[] args)
  161.         {
  162.                 new ImageProcessDemo();
  163.         }
  164.  
  165. }
  166.  

回复 "通过修改图片的rgb来改变图片的亮度"

这儿你可以回复上面这条便签

captcha