import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import java.lang.*;
public class LineGrey extends Frame {
Image im, tmp, tmp2; int i, iw, ih; int[] pixels; boolean flag = false, flag2 = false; double a, b; TextField texta, textb; // 构造方法
public LineGrey() {
super("线性灰度变换");
Panel pdown;
JButton load, run, save, quit;
// parse.Double // 添加窗口监听事件
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}); pdown = new Panel();
pdown.setBackground(Color.lightGray); load = new JButton("打开图像");
run = new JButton("灰度变换");
quit = new JButton("退出");
texta = new TextField("请输入a值", 6);
textb = new TextField("请输入b值", 6);
save = new JButton("保存");
// String str = text.getText();
// a = Double.parseDouble(str); this.add(pdown, BorderLayout.SOUTH); pdown.add(load);
pdown.add(run); pdown.add(texta);
pdown.add(textb);
pdown.add(save);
pdown.add(quit); load.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jLoad_ActionPerformed(e);
}
}); run.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jRun_ActionPerformed(e);
}
}); quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jQuit_ActionPerformed(e);
}
}); save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jSave_ActionPerformed(e);
}
});
} public void jLoad_ActionPerformed(ActionEvent e) {
// 利用MediaTracker跟踪图像的加载
MediaTracker tracker = new MediaTracker(this);
// im = Toolkit.getDefaultToolkit().getImage("Miss.jpg"); JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { ImageIcon icon = new ImageIcon(chooser.getSelectedFile()
.getAbsolutePath());
im = icon.getImage(); } tracker.addImage(im, 0); // 等待图像的完全加载
try {
tracker.waitForID(0);
} catch (InterruptedException e2) {
e2.printStackTrace();
} // 获取图像的宽度iw和高度ih
iw = im.getWidth(this);
ih = im.getHeight(this); pixels = new int[iw * ih]; try {
PixelGrabber pg = new PixelGrabber(im, 0, 0, iw, ih, pixels, 0, iw);
pg.grabPixels();
} catch (InterruptedException e3) {
e3.printStackTrace();
} // 获得图像的RGB值和Alpha值
ColorModel cm = ColorModel.getRGBdefault();
for (i = 0; i < iw * ih; i++) {
int alpha = cm.getAlpha(pixels[i]);
int red = cm.getRed(pixels[i]);
int green = cm.getGreen(pixels[i]);
int blue = cm.getBlue(pixels[i]);
pixels[i] = alpha << 24 | red << 16 | green << 8 | blue;
} // 将数组中的象素产生一个图像
ImageProducer ip = new MemoryImageSource(iw, ih, pixels, 0, iw);
tmp = createImage(ip);
flag = true;
flag2 = false; // Graphics g =new Graphics();
// g.drawImage(tmp, 10, 20, this);
repaint();
} public void jRun_ActionPerformed(ActionEvent e) {
if (flag) { String str1 = texta.getText();
a = Double.parseDouble(str1);
String str2 = textb.getText();
b = Double.parseDouble(str2); try {
PixelGrabber pg = new PixelGrabber(im, 0, 0, iw, ih, pixels, 0,
iw);
pg.grabPixels();
} catch (InterruptedException e3) {
e3.printStackTrace();
} // 对图像进行进行线性拉伸,Alpha值保持不变
ColorModel cm = ColorModel.getRGBdefault();
for (i = 0; i < iw * ih; i++) {
int alpha = cm.getAlpha(pixels[i]);
int red = cm.getRed(pixels[i]);
int green = cm.getGreen(pixels[i]);
int blue = cm.getBlue(pixels[i]); // 增加了图像的亮度 red = (int) (a * red + b);
green = (int) (a * green + b);
blue = (int) (a * blue + b);
if (red >= 255) {
red = 255;
}
if (green >= 255) {
green = 255;
}
if (blue >= 255) {
blue = 255;
}
pixels[i] = alpha << 24 | red << 16 | green << 8 | blue;
} // 将数组中的象素产生一个图像
ImageProducer ip = new MemoryImageSource(iw, ih, pixels, 0, iw);
tmp2 = createImage(ip);
flag2 = true; repaint();
} else {
JOptionPane.showMessageDialog(null, "请先打开一幅图片!", "提示",
JOptionPane.WARNING_MESSAGE);
}
} public void jSave_ActionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
if (chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
......
//这里接下来再怎么操作,才能将处理后的图片保存下来啊??
//处理后的图像数据保存在pixels[] 数组里面 }
} public void jQuit_ActionPerformed(ActionEvent e) {
// System.exit(0);
JOptionPane op = new JOptionPane();
int exit = op.showConfirmDialog(this, "你要退出吗? ? ?", "退出",
JOptionPane.YES_NO_OPTION); if (exit == JOptionPane.YES_OPTION) {
System.exit(0); } else {
}
} // 调用paint()方法,显示图像信息。
public void paint(Graphics g) {
if (flag) {
g.drawImage(tmp, 10, 20, this); if (flag2) {
g.drawImage(tmp2, 30 + iw, 20, this); }
} else {
}
} // 定义main方法,设置窗口的大小,显示窗口
public static void main(String[] args) {
LineGrey lg = new LineGrey();
lg.setLocation(50, 50);
lg.setSize(600, 400);
lg.show();
}
}
import java.awt.event.*;
import java.awt.image.*;
import java.io.File;
import java.io.IOException;import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;
import java.lang.*;
public class LineGrey extends Frame {
Image im, tmp, tmp2; int i, iw, ih; int[] pixels; boolean flag = false, flag2 = false; double a, b; TextField texta, textb; // 构造方法
public LineGrey() {
super("线性灰度变换");
Panel pdown;
JButton load, run, save, quit;
// parse.Double // 添加窗口监听事件
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}); pdown = new Panel();
pdown.setBackground(Color.lightGray); load = new JButton("打开图像");
run = new JButton("灰度变换");
quit = new JButton("退出");
texta = new TextField("请输入a值", 6);
textb = new TextField("请输入b值", 6);
save = new JButton("保存");
// String str = text.getText();
// a = Double.parseDouble(str); this.add(pdown, BorderLayout.SOUTH); pdown.add(load);
pdown.add(run); pdown.add(texta);
pdown.add(textb);
pdown.add(save);
pdown.add(quit); load.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jLoad_ActionPerformed(e);
}
}); run.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jRun_ActionPerformed(e);
}
}); quit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jQuit_ActionPerformed(e);
}
}); save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jSave_ActionPerformed(e);
}
});
} public void jLoad_ActionPerformed(ActionEvent e) {
// 利用MediaTracker跟踪图像的加载
MediaTracker tracker = new MediaTracker(this);
// im = Toolkit.getDefaultToolkit().getImage("Miss.jpg"); JFileChooser chooser = new JFileChooser(); FileNameExtensionFilter filter = new FileNameExtensionFilter(
"JPG & GIF Images", "jpg", "gif");
chooser.setFileFilter(filter);
if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { ImageIcon icon = new ImageIcon(chooser.getSelectedFile()
.getAbsolutePath());
im = icon.getImage(); } tracker.addImage(im, 0); // 等待图像的完全加载
try {
tracker.waitForID(0);
} catch (InterruptedException e2) {
e2.printStackTrace();
} // 获取图像的宽度iw和高度ih
iw = im.getWidth(this);
ih = im.getHeight(this); pixels = new int[iw * ih]; try {
PixelGrabber pg = new PixelGrabber(im, 0, 0, iw, ih, pixels, 0, iw);
pg.grabPixels();
} catch (InterruptedException e3) {
e3.printStackTrace();
} // 获得图像的RGB值和Alpha值
ColorModel cm = ColorModel.getRGBdefault();
for (i = 0; i < iw * ih; i++) {
int alpha = cm.getAlpha(pixels[i]);
int red = cm.getRed(pixels[i]);
int green = cm.getGreen(pixels[i]);
int blue = cm.getBlue(pixels[i]);
pixels[i] = alpha << 24 | red << 16 | green << 8 | blue;
} // 将数组中的象素产生一个图像
ImageProducer ip = new MemoryImageSource(iw, ih, pixels, 0, iw);
tmp = createImage(ip);
flag = true;
flag2 = false; // Graphics g =new Graphics();
// g.drawImage(tmp, 10, 20, this);
repaint();
} public void jRun_ActionPerformed(ActionEvent e) {
if (flag) { String str1 = texta.getText();
a = Double.parseDouble(str1);
String str2 = textb.getText();
b = Double.parseDouble(str2); try {
PixelGrabber pg = new PixelGrabber(im, 0, 0, iw, ih, pixels, 0,
iw);
pg.grabPixels();
} catch (InterruptedException e3) {
e3.printStackTrace();
} // 对图像进行进行线性拉伸,Alpha值保持不变
ColorModel cm = ColorModel.getRGBdefault();
for (i = 0; i < iw * ih; i++) {
int alpha = cm.getAlpha(pixels[i]);
int red = cm.getRed(pixels[i]);
int green = cm.getGreen(pixels[i]);
int blue = cm.getBlue(pixels[i]); // 增加了图像的亮度 red = (int) (a * red + b);
green = (int) (a * green + b);
blue = (int) (a * blue + b);
if (red >= 255) {
red = 255;
}
if (green >= 255) {
green = 255;
}
if (blue >= 255) {
blue = 255;
}
pixels[i] = alpha << 24 | red << 16 | green << 8 | blue;
} // 将数组中的象素产生一个图像
ImageProducer ip = new MemoryImageSource(iw, ih, pixels, 0, iw);
tmp2 = createImage(ip);
flag2 = true; repaint();
} else {
JOptionPane.showMessageDialog(null, "请先打开一幅图片!", "提示",
JOptionPane.WARNING_MESSAGE);
}
} public void jSave_ActionPerformed(ActionEvent e) {
JFileChooser chooser = new JFileChooser();
if (chooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) {
......
//这里接下来再怎么操作,才能将处理后的图片保存下来啊??
//处理后的图像数据保存在pixels[] 数组里面 }
} public void jQuit_ActionPerformed(ActionEvent e) {
// System.exit(0);
JOptionPane op = new JOptionPane();
int exit = op.showConfirmDialog(this, "你要退出吗? ? ?", "退出",
JOptionPane.YES_NO_OPTION); if (exit == JOptionPane.YES_OPTION) {
System.exit(0); } else {
}
} // 调用paint()方法,显示图像信息。
public void paint(Graphics g) {
if (flag) {
g.drawImage(tmp, 10, 20, this); if (flag2) {
g.drawImage(tmp2, 30 + iw, 20, this); }
} else {
}
} // 定义main方法,设置窗口的大小,显示窗口
public static void main(String[] args) {
LineGrey lg = new LineGrey();
lg.setLocation(50, 50);
lg.setSize(600, 400);
lg.show();
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货