要用Java实现图形的放大和缩小,可以使用以下代码:
import java.awt.*;import java.awt.event.*;import javax.swing.*;//实现矩形在规定时间间隔里循环放大缩小;
//画矩形,实心矩形为fillRect(....)?g.setColor (Color.RED);?//同上...?g.drawOval (x,y,w,h);? //画椭圆?setTitle (w+","+h);? //以矩形宽和高来设置窗口标题?}?public void setSize(){?float n = getWidth()/getWidth();?if(w==0||h==0)?flag = false;
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,所以呢Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 .
Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点.Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等.
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
public class vv extends JDialog {
private static final long serialVersionUID = 1L;
private JLabel l_Id = new JLabel("登陆账户", JLabel.CENTER);
private JLabel l_pw = new JLabel("登陆密码", JLabel.CENTER);
private JTextField t_Id = new JTextField(10);
private JPasswordField t_pw = new JPasswordField(10);
private JButton btnLogin;
private JButton btnClose;
public vv() {
super();
setResizable(false);
getContentPane().setLayout(null);
initialize();
}
protected void initialize() {
setTitle("系统登录");
getContentPane().add(l_Id);
getContentPane().add(l_pw);
getContentPane().add(t_Id);
getContentPane().add(t_pw);
btnLogin = new JButton();
btnLogin.setText("登 录");
btnLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
addBtnLoginActionListener();
});
getContentPane().add(btnLogin);
btnClose = new JButton();
btnClose.setText("关 闭");
btnClose.addActionListener(new ActionListener() {
dispose();
System.exit(-1);
getContentPane().add(btnClose);
private void addBtnLoginActionListener() {
String user = t_Id.getText();
String password = new String(t_pw.getPassword());
if (user.equals("")) {
JOptionPane.showMessageDialog(this, "帐号不可为空", "Caution",
JOptionPane.WARNING_MESSAGE);
return;
if (password.equals("")) {
JOptionPane.showMessageDialog(this, "密码不可为空", "Caution",
String sql = "select * FROM login WHERE id = '" + user + "' and pw = '"
+ password + "'";
boolean success = false;
// TODO:数据校验 success = executeQuery(sql);
if (success) {
// TODO: 如果数据校验成功 显示主界面 并关闭登录界面
JOptionPane.showMessageDialog(this, "成功登录", "提示",
JOptionPane.INFORMATION_MESSAGE);
this.dispose();
} else {
JOptionPane.showMessageDialog(this, "帐号或密码错误!", "警告",
t_pw.requestFocus(); // 密码框选中
public Dimension getPreferredSize() {
public void show() {
Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screen = tk.getScreenSize();
Dimension d = getSize();
getRootPane().setDefaultButton(btnLogin);
t_pw.requestFocus();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
super.show();
public static void main(String[] args) {
vv loginFrame = new vv();
loginFrame.setVisible(true);
希望对你有帮助
一:几何距(Geometric Moments)知识与质心寻找原理
① Image Moments是图像处理中非常有用的算法,可以用来计算区域图像的质心,方向等几何特性,同时Mpq的高阶具有旋转不变性,可以用来实现图像比较分类,正是因为Moments有这些特性,很多手绘油画效果也会基于该算法来模拟实现.它的数学表达为:
就是通过该点,区域达到一种质量上的平衡状态,可能物理学上讲的比较多,简单点的说就是规则几何物体的中心,不规则的可以通过挂绳子的方法来寻找.
二:算法流程
① 输入图像转换为二值图像
三:算法效果
左边为原图, 右边蓝色为连通组件标记算法处理以后结果,白色点为质心
四:关键代码解析
① 计算几何距算法代码
doublem00 = moments(pixels, width, height, 0, 0);
doublexCr = moments(pixels, width, height, 1, 0) / m00;// row
doubleyCr = moments(pixels, width, height, 0, 1) / m00;// column
return new double[]{xCr, yCr};
Java图像处理技巧四则
下面代码中用到的sourceImage是一个已经存在的Image对象
图像剪切
对于一个已经存在的Image对象,要得到它的一个局部图像,可以使用下面的步骤:
//import java.awt.*;
//import java.awt.image.*;
Image croppedImage;
ImageFilter cropFilter;
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的图像
//其它情况请参考API
灰度变换
/* GrayFilter.java*/
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;
public void setColorModel(ColorModel cm) {
if (modelStyle==GrayModel
else if (modelStyle==GrayModel
public int filterRGB(int x,int y,int pixel) {
return pixel;
/* GrayModel.java*/
public class GrayModel extends ColorModel {
public static final int CS_MAX=0;
public static final int CS_FLOAT=1;
ColorModel sourceModel;
public GrayModel(ColorModel sourceModel) {
super(sourceModel.getPixelSize());
this.sourceModel=sourceModel;
modelStyle=0;
public GrayModel(ColorModel sourceModel,int style) {
public void setGrayStyle(int style) {
protected int getGrayLevel(int pixel) {
if (modelStyle==CS_MAX) {
return Math.max(sourceModel.getRed(pixel),Math.max(sourceModel.getGreen(pixel),sourceModel.getBlue(pixel)));
else if (modelStyle==CS_FLOAT){
else {
return 0;
public int getAlpha(int pixel) {
return sourceModel.getAlpha(pixel);
public int getRed(int pixel) {
return getGrayLevel(pixel);
public int getGreen(int pixel) {
public int getBlue(int pixel) {
public int getRGB(int pixel) {
int gray=getGrayLevel(pixel);
如果你有自己的算法或者想取得特殊的效果,你可以修改类GrayModel的方法getGrayLevel().
色彩变换
根据上面的原理,我们也可以实现色彩变换,这样的效果就很多了.下面是一个反转变换的例子:
/* ReverseColorModel.java*/
public class ReverseColorModel extends ColorModel {
public ReverseColorModel(ColorModel sourceModel) {
return ~sourceModel.getRed(pixel);
return ~sourceModel.getGreen(pixel);
return ~sourceModel.getBlue(pixel);
public class ReverseFilter extends RGBImageFilter {
public ReverseFilter() {
substituteColorModel(cm,new ReverseColorModel(cm));
要想取得自己的效果,需要修改ReverseColorModel.java中的三个方法,getRed、getGreen、getBlue.
下面是上面的效果的一个总的演示程序.
/*GrayImage.java*/
import java.awt.*;
import javax.swing.*;
import java.awt.color.*;
public class GrayImage extends JFrame{
ImageIcon ii;
int iw,ih;
public GrayImage() {
ii=new ImageIcon(\"images/11.gif\");
source=ii.getImage();
iw=source.getWidth(this);
ih=source.getHeight(this);
filter=new GrayFilter();
gray=createImage(new FilteredImageSource(source.getSource(),filter));
clip=createImage(new FilteredImageSource(source.getSource(),cropFilter));
MediaTracker mt=new MediaTracker(this);
mt.addImage(gray,0);
try {
mt.waitForAll();
} catch (Exception e) {
简易的计算器代码如下,请参照:
import?java.awt.BorderLayout;
import?java.awt.GridLayout;
import?java.awt.event.ActionEvent;
import?java.awt.event.ActionListener;
import?java.awt.event.KeyAdapter;
import?java.awt.event.KeyEvent;
import?javax.swing.JButton;
import?javax.swing.JFrame;
import?javax.swing.JPanel;
import?javax.swing.JTextField;
/**
*?计算器类
*?
*
*/
public?class?Calculator?extends?JFrame?implements?ActionListener?{
//?文本框
private?JTextField?result;
//?按钮数组
private?JButton[]?buttons;
//?按钮文本
//?是否为第一个输入的数字
private?boolean?isFirstDigit?=?true;
//?运算结果
private?double?resultNum?=?0.0;
//?运算符
private?String?operator?=?"=";
public?Calculator(String?title)?{
//?设置标题栏
super(title);
//?初始化各组件
init();
//?注册各组件监听器
registerListener();
//?显示窗体
setVisible(true);
*?初始化各组件
private?void?init()?{
//?常用属性初始化
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
/*?文本框对象初始化?*/
result?=?new?JTextField("0");
//?文本右对齐
result.setHorizontalAlignment(JTextField.RIGHT);
result.setEditable(false);
/*?按钮初始化?*/
buttons?=?new?JButton[characters.length];
for?(int?i?=?0;?i?buttons.length;?i++)?{
buttons[i]?=?new?JButton(characters[i]);
buttons[i].setFocusable(false);?//?不允许按钮定位焦点
/*?将文本框与按钮添加到窗体中?*/
add(result,?BorderLayout.NORTH);
for?(JButton?jButton?:?buttons)?{
pnl.add(jButton);
add(pnl);
this.getContentPane().setFocusable(true);
*?注册监听器
private?void?registerListener()?{
jButton.addActionListener(this);
//?注册键盘事件
this.getContentPane().addKeyListener(new?KeyAdapter()?{
public?void?keyPressed(KeyEvent?e)?{
String?text?=?String.valueOf(e.getKeyChar());
if?(Character.isDigit(text.charAt(0))?||?".".equals(text))?{?//?数字或小数点
handleNumber(text);
}?else?if?("+-*/=".indexOf(text)?!=?-1)?{?//?运算符
handleOperator(text);
String?tmp?=?result.getText().trim();
if?(tmp.length()?==?1)?{
result.setText("0");
isFirstDigit?=?true;
}?else?{
result.setText(tmp.substring(0,?tmp.length()?-?1));
public?void?actionPerformed(ActionEvent?e)?{
JButton?btn?=?(JButton)?e.getSource();
String?text?=?btn.getText().trim();
if?(Character.isDigit(text.charAt(0))?||?".".equals(text))?{?//?处理数字和小数点
}?else?{?//?处理运算符
*?处理数字和小数点
private?void?handleNumber(String?text)?{
if?(isFirstDigit)?{?//?第一次输入
if?(".".equals(text))?{
this.result.setText("0.");
this.result.setText(text);
}?else?if?("0".equals(text)?"0".equals(this.result.getText()))?{
}?else?if?(".".equals(text)?this.result.getText().indexOf(".")?==?-1)?{
this.result.setText(this.result.getText()?+?".");
}?else?if?(!".".equals(text))?{
this.result.setText(this.result.getText()?+?text);
isFirstDigit?=?false;
*?处理运算符
private?void?handleOperator(String?text)?{
case?"+":
resultNum?+=?Double.parseDouble(this.result.getText());
break;
case?"-":
resultNum?-=?Double.parseDouble(this.result.getText());
case?"*":
resultNum?*=?Double.parseDouble(this.result.getText());
case?"/":
resultNum?/=?Double.parseDouble(this.result.getText());
case?"=":
resultNum?=?Double.parseDouble(this.result.getText());
//?将文本框的值修改为运算结果
this.result.setText(String.valueOf(resultNum));
operator?=?text;
public?static?void?main(String[]?args)?{
new?Calculator("My?Calculator");
运行结果如下:
以上就是土嘎嘎小编为大家整理的java图形处理代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!