龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > JAVA开发 >

Java编程图像处理技巧

时间:2009-12-23 15:42来源:未知 作者:admin 点击:
分享到:
下面代码中用到的sourceImage是一个已经存在的Image对象 图像剪切 对于一个已经存在的Image对象,要得到它的一个局部图像,可以使用下面的步骤: //import Java.awt.*; //import java.awt.image.*;

  
  下面代码中用到的sourceImage是一个已经存在的Image对象
  
  图像剪切
  
  对于一个已经存在的Image对象,要得到它的一个局部图像,可以使用下面的步骤:
  
   //import Java.awt.*;
  //import java.awt.image.*;
  Image croppedImage;
  ImageFilter cropFilter;
  CropFilter =new CropImageFilter(25,30,75,75);//四个参数分别为图像起点坐标和宽高,即CropImageFilter(int x,int y,int width,int height),具体情况请参考API
  CroppedImage= Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(sourceImage.getSource(),cropFilter));
  //假如是在Component的子类中使用,可以将上面的Toolkit.getDefaultToolkit().去掉。
  //FilteredImageSource是一个ImageProdUCer对象。
  图像缩放
  
  对于一个已经存在的Image对象,得到它的一个缩放的Image对象可以使用Image的getScaledInstance方法:
  
   Image scaledImage=sourceImage. getScaledInstance(100,100, Image.SCALE_DEFAULT);//得到一个100X100的图像
  Image doubledImage=sourceImage. getScaledInstance(sourceImage.getWidth(this)*2,sourceImage.getHeight(this)*2, Image.SCALE_DEFAULT);//得到一个放大两倍的图像,这个程序一般在一个swing的组件中使用,而类Jcomponent实现了图像观察者接口ImageObserver,所有可以使用this。
  //其它情况请参考API。
  
  灰度变换
  
  下面的程序使用三种方法对一个彩色图像进行灰度变换,变换的效果都不一样。一般而言,灰度变换的算法是将象素的三个颜色分量使用R*0.3+G*0.59+B*0.11得到灰度值,然后将之赋值给红绿蓝,这样颜色取得的效果就是灰度的。另一种就是取红绿蓝三色中的最大值作为灰度值。java核心包也有一种算法,但是没有看源代码,不知道具体算法是什么样的,效果和上述不同。
  
   /* GrayFilter.java*/
  /*@author:cherami */
  /*email:cherami@163.net*/
  import java.awt.image.*;
  
  public class GrayFilter extends RGBImageFilter {
  int modelStyle;
  public GrayFilter() {
  modelStyle=GrayModel.CS_MAX;
  canFilterIndexColorModel=true;
  }
  public GrayFilter(int style) {
  modelStyle=style;
  canFilterIndexColorModel=true;
  }
  public void setColorModel(ColorModel cm) {
  if (modelStyle==GrayModel.CS_MAX) {
  substituteColorModel(cm,new GrayModel(cm));
  }
  else if (modelStyle==GrayModel.CS_FLOAT) {
  substituteColorModel(cm,new GrayModel(cm,modelStyle));
  }
  }
  public int filterRGB(int x,int y,int pixel) {
  return pixel;
  }
  }
  
  /* GrayModel.java*/
  /*@author:cherami */
  /*email:cherami@163.net*/
  
  import java.awt.image.*;
  
  public class GrayModel extends ColorModel {
  public static final int CS_MAX=0;
  public static final int CS_FLOAT=1;
  ColorModel sourceModel;
  int modelStyle;
  public GrayModel(ColorModel sourceModel) {
  super(sourceModel.getPixelSize());
  this.sourceModel=sourceModel;
  modelStyle=0;
  }
  public GrayModel(ColorModel sourceModel,int style) {
  super(sourceModel.getPixelSize());
  this.sourceModel=sourceModel;
  modelStyle=style;
  }
  public void setGrayStyle(int style) {
  modelStyle=style;
  }
  protected int getGrayLevel(int pixel) {
  if (modelStyle==CS_MAX) {
  return Math.max(sourceModel.getRed(pixel),Math.max(sourceModel.getGreen(pixel),sourceModel.getBlue(pixel)));
  }
  
  
精彩图集

赞助商链接