blurtest.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 104 行

JAVA
104
字号
     import java.applet.*;
     import java.awt.*;
     import java.awt.event.*;
     import java.awt.image.*;
     import java.awt.geom.*; 
  
     public class BlurTest extends Applet implements ActionListener
     {  
          // 原始和模糊后的BufferedImage
          private BufferedImage sourceImage;
          private BufferedImage destImage;

          // 用来接受文件名的文本域
          private TextField input;

          public void init()
          {
               // 创建一个布局并添加文本域和"Ok"按钮
               setLayout(new BorderLayout());
               Panel p = new Panel();
               input = new TextField("", 20);
               p.add(input);
               Button ok = new Button("Ok");
               ok.addActionListener(this);
               p.add(ok);
               add(p, BorderLayout.SOUTH);
          }
          
          public void paint(Graphics g)
          {
               // 把传入的Graphics容器转换为一个可用的 Graphics2D 对象
               Graphics2D g2d = (Graphics2D)g;

               // 如果文本框中只有空格的话绘制一个友好的输入文件名的提示
               if("".equals(input.getText().trim()))
               {
                    g2d.drawString("Enter a filename to blur", 10, 50);
                    return;
               }

               // 加载输入的图像
               MediaTracker mt = new MediaTracker(this);
               Image img = getImage(getCodeBase(), input.getText());
               mt.addImage(img, 0);
               try
               {    
                    // 在进行下一步前等待直到图像完全加载 
                    mt.waitForID(0);
               }
               catch(InterruptedException e) { /* 什么也不做 */ }

               // 我们的模糊操作需要一个BufferedImage对象,
               //所以把输入图像绘制到一个新的BufferedImage对象
               sourceImage = new BufferedImage(img.getWidth(this),
                                               img.getHeight(this),
                                               BufferedImage.TYPE_INT_RGB);
               sourceImage.createGraphics().drawImage(img, null, this);

               // 创建目的图像
               destImage = new BufferedImage(sourceImage.getWidth(this),
                                             sourceImage.getHeight(this),
                                             BufferedImage.TYPE_INT_RGB);

               // 模糊输入图像
               blur(sourceImage, destImage, 0.1f, 3, 3);

               // 绘制源图像和目标图像
               AffineTransform at = new AffineTransform();
               int width = sourceImage.getWidth(this);
               g2d.drawImage(sourceImage, at, this);      
               at.translate(width+20, 0);
               g2d.drawImage(destImage, at, this);      
          }

          // 使用ConvolveOp操作模糊图像           
          public void blur(
              BufferedImage sourceImage,  // 输入图像数据
              BufferedImage destImage,    // 输出图像数据
              float weight,               // Kernel 数据的权重
              int width,                  // Kernel 的宽
              int height                  // Kernel 的高
              )
          {
               // Kernel数据数组
               float[] elements = new float[width*height]; 

               // 用权重填充数组
               java.util.Arrays.fill(elements, weight);

               // 使用元素数组的和宽、高来创建一个Kernel对象
               Kernel k = new Kernel(width, height, elements);
               ConvolveOp blurOp = new ConvolveOp(k);

               // 模糊图像
               blurOp.filter(sourceImage, destImage); 
          }

          public void actionPerformed(ActionEvent e)
          {
               // "Ok" 按钮被按下;更新
               repaint();
          } 

     }    // BlurTest

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?