JAVA实现图像缩放(通过 java.awt.geom的仿射变换结合java.awt.image的各种插值方法实现)。
程序分为2部分:
- 实现标准封装ImageScale功能
- 代码块去测试和使用ImageScale类的效果,以及对其中RGB元素通过移位手段的提取
package com.han; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; public class Test_ImageScale { public static void main(String[] args){ BufferedImage in; try { in = ImageIO.read(new File("C:/Users/HAN/Pictures/1_gaowen_han.jpg")); long t1 = System.currentTimeMillis(); //设定时间,以便可以比较各种不同插值的效率与系统开销 BufferedImage out=ImageScale.scale(in, 4, 4, 3);//进行图像缩放 long t2 = System.currentTimeMillis(); //写出结果图片到电脑硬盘 boolean b=ImageIO.write(out, "jpg", new File("C:/Users/HAN/Pictures/scale_gaowen_han.jpg")); System.out.println(b); System.out.println(t2-t1); System.out.println("Width : "+out.getWidth()+"\n"+"Height : "+out.getHeight()); /* int pixel=out.getRGB(0, 0); int R=(pixel & 0xff0000)>>16; int G=(pixel & 0xff00)>>8; int B=(pixel & 0xff); System.out.println("pixel R : "+R); System.out.println("pixel G : "+G); System.out.println("pixel B : "+B);*/ /**********对缩放后的图像的像素RGB的提取********************/ // 1. 直接进行单个元素的提取 // 2. 进行图像中一块特定区域的像素提取 // 3. 分别输出,进行比较以验证数学运算公式的正确性 int startX=0; int startY=0; int offset=0; int scansize=10; int[] rgbArray=out.getRGB(startX, startY, 10, 10, null, offset, scansize); int x=8; int y=8; int pixel=out.getRGB(x, y); int pixel_prime = rgbArray[offset + (y-startY)*scansize + (x-startX)]; int R,G,B; R=(pixel & 0xff0000)>>16; G=(pixel & 0xff00)>>8; B=(pixel & 0xff); /*反之,由RGB分量也可以得到包装的颜色值 int rbg = (255 << 24) | (r << 16) | (g << 8 )| b;*/ System.out.println("pixel R : "+R); System.out.println("pixel G : "+G); System.out.println("pixel B : "+B); R=(pixel_prime & 0xff0000)>>16; G=(pixel_prime & 0xff00)>>8; B=(pixel_prime & 0xff); System.out.println("pixel R : "+R); System.out.println("pixel G : "+G); System.out.println("pixel B : "+B); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
有了像素的提取,使得能够像Matlab,Mathematica,IDL那样自己编写卫星照片处理等程序。当然JAVA中有自己的很多优秀封装库可以直接引用,比如JAVA Advanced Image Processing等。