📄 filterdemo.java
字号:
import java.awt.*;import java.awt.event.*;import java.awt.image.*;import java.awt.geom.AffineTransform;import java.awt.font.TextLayout;import javax.swing.*;import java.net.URL;public class FilterDemo extends JApplet { static boolean isStandAlone = false; private BufferedImage bi[]; //定义尖锐化滤镜的数值 public static final float[] SHARPEN3x3_3 = {0.f, -1.f, 0.f, -1.f, 5.f, -1.f, 0.f, -1.f, 0.f}; //Applet初始化方法 public void init() { setBackground(Color.white); bi = new BufferedImage[4]; String s[] = { "image1.jpg", "image2.jpg", "image1.jpg", "image2.jpg"}; for ( int i = 0; i < bi.length; i++ ) { Image img = null; if(!isStandAlone){//Applet取得图像的方法 img = getImage(getURL(s[i])); }else{ //Application取得图像的方法 ImageIcon tempIcon = new ImageIcon(s[i]); img = tempIcon.getImage(); } //使每一张图片正确经过滤镜处理 try { MediaTracker tracker = new MediaTracker(this); tracker.addImage(img, 0); tracker.waitForID(0); } catch ( Exception e ) { } int iw = img.getWidth(this); int ih = img.getHeight(this); bi[i] = new BufferedImage(iw, ih, BufferedImage.TYPE_INT_RGB); Graphics2D big = bi[i].createGraphics(); big.drawImage(img,0,0,this); } } public void paint(Graphics g) { //取得Graphics2D类,并且进行滤镜初始化设置 Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); int w = getSize().width; int h = getSize().height; g2.setColor(Color.black); float[][] data = {{0.1f, 0.1f, 0.1f, 0.1f, 0.2f, 0.1f, 0.1f, 0.1f, 0.1f}, SHARPEN3x3_3}; String theDesc[] = { "无特效", "尖锐特效", "黄照片特效", "漂白"}; //进入图片处理特效循环 for ( int i = 0; i < bi.length; i++ ) { int iw = bi[i].getWidth(this); int ih = bi[i].getHeight(this); int x = 0, y = 0; //改变图片大小的类 AffineTransform at = new AffineTransform(); at.scale((w-14)/2.0/iw, (h-34)/2.0/ih); //使用BufferedImageOp类与BufferedImage类进行特效处理 BufferedImageOp biop = null; BufferedImage bimg = new BufferedImage(iw,ih,BufferedImage. TYPE_INT_RGB); switch (i) { case 0 : case 1 : x = i==0?5:w/2+3; y = 15; Kernel kernel = new Kernel(3,3,data[i]); //尖锐特效类 ConvolveOp cop = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); cop.filter(bi[i],bimg); biop = new AffineTransformOp(at, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); break; case 2 : x = 5; y = h/2+15; byte chlut[] = new byte[256]; for ( int j=0;j<200 ;j++ ) chlut[j]=(byte)(256-j); //变色特效类 ByteLookupTable blut=new ByteLookupTable(0,chlut); LookupOp lop = new LookupOp(blut, null); lop.filter(bi[i],bimg); biop = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); break; case 3 : x = w/2+3; y = h/2+15; //漂白特效类 RescaleOp rop = new RescaleOp(1.5f,10.0f, null); rop.filter(bi[i],bimg); biop = new AffineTransformOp(at, AffineTransformOp.TYPE_BILINEAR); } //显示图片 g2.drawImage(bimg,biop,x,y); TextLayout tl = new TextLayout(theDesc[i], g2.getFont(), g2.getFontRenderContext()); tl.draw(g2, (float) x, (float) y-4); } } //取得图片文件完全地址的方法 protected URL getURL(String filename) { URL codeBase = null; URL url = null; try{ codeBase = this.getCodeBase(); url = new URL(codeBase, filename); return url; }catch(Exception e){ System.out.println("找不到提供的文件"); return null; } } //Applet独立运行的程序 public static void main(String s[]) { isStandAlone = true; JFrame f = new JFrame("图片特效"); //窗口关闭时清空内存 f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) {System.exit(0);} }); JApplet applet = new FilterDemo(); f.getContentPane().add("Center", applet); applet.init(); f.pack(); f.setSize(new Dimension(550,550)); f.show(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -