以下代码已经实现从磁盘读出一张jpeg图片,老师要求的读出的jpeg按BMp格式写到磁盘中,要求用windows中能打开,并且它的属性是BMP图像的属性.帮帮忙吧,这是小弟的一次综合性实验,关系到期末成绩的大事.小弟的
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.awt.*; import java.io.*;
import java.io.File;
import java.io.IOException; import java.util.LinkedList;
import java.util.*; import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane; class JpegToBmpFrame extends JFrame { //保存当前操作的像素矩阵
private int currentPixArray[]=null; //图像的路径
private String fileString=null;
//用于显示图像的标签
private JLabel imageLabel=null; //加载的图像
private BufferedImage newImage; //图像的高和宽
private int h,w; //保存历史操作图像矩阵
private LinkedList <int[]> imageStack=new LinkedList <int []>();
private LinkedList <int []> tempImageStack=new LinkedList <int []>();
public JpegToBmpFrame(String title){
super(title);
this.setSize(800,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//创建菜单
JMenuBar jb=new JMenuBar();
JMenu fileMenu=new JMenu("文件");
jb.add(fileMenu);
JMenuItem openImageMenuItem=new JMenuItem("打开");
fileMenu.add(openImageMenuItem);
openImageMenuItem.addActionListener(new OpenListener());
JMenuItem exitMenu=new JMenuItem("退出");
fileMenu.add(exitMenu);
exitMenu.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
JMenu operateMenu=new JMenu("操作");
jb.add(operateMenu);
JMenuItem ChToBmpMenuItem=new JMenuItem("转成BMP");
operateMenu.add(ChToBmpMenuItem);
//ChToBmpMenuItem.addActionListener(new ChToBmpListener());
this.setJMenuBar(jb);
imageLabel=new JLabel("");
JScrollPane pane = new JScrollPane(imageLabel);
this.add(pane,BorderLayout.CENTER);
this.setVisible(true);
} //////////////////菜单监听器\\\\\\\\\\\\\\\\\\\\\\\
/*private class ChToBmpListener implements ActionListener{
public void ActionDo(ActionEvent c){
try
{
//利用系统输入设备作为文件输入流
FileInput
}
}
}*/
//////////////////菜单监听器\\\\\\\\\\\\\\\\\\\\\\\
private class OpenListener implements ActionListener{
public void actionPerformed(ActionEvent e){
JFileChooser jc=new JFileChooser();
int returnValue=jc.showOpenDialog(null);
if (returnValue ==JFileChooser.APPROVE_OPTION) {
File selectedFile =jc.getSelectedFile();
if (selectedFile != null) {
fileString=selectedFile.getAbsolutePath();
try{
newImage =ImageIO.read(new File(fileString));
w=newImage.getWidth();
h=newImage.getHeight();
currentPixArray=getPixArray(newImage,w,h);
imageStack.clear();
tempImageStack.clear();
imageStack.addLast(currentPixArray);
imageLabel.setIcon(new ImageIcon(newImage));
}catch(IOException ex){
System.out.println(ex);
}
}
}
JpegToBmpFrame.this.repaint();
JpegToBmpFrame.this.pack();
}
}
//////////////////获取图像像素矩阵\\\\\\\\\\\\\\\\\\\
private int[]getPixArray(Image im,int w,int h){
int[] pix=new int[w*h];
PixelGrabber pg=null;
try{
pg = new PixelGrabber(im, 0, 0, w, h, pix, 0, w);
if(pg.grabPixels()!=true)
try{
throw new java.awt.AWTException("pg error"+pg.status());
}catch(Exception eq){
eq.printStackTrace();
}
} catch(Exception ex){
ex.printStackTrace(); }
return pix;
} //////////////////显示图片\\\\\\\\\\\\\\\\\\\\\\\
private void showImage(int[] srcPixArray){
Image pic=createImage(new MemoryImageSource(w,h,srcPixArray,0,w));
ImageIcon ic=new ImageIcon(pic);
imageLabel.setIcon(ic);
imageLabel.repaint();
}
public static void main(String[] args) {
new JpegToBmpFrame("ShowImage");
} }
import java.awt.BorderLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
import java.awt.*; import java.io.*;
import java.io.File;
import java.io.IOException; import java.util.LinkedList;
import java.util.*; import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane; class JpegToBmpFrame extends JFrame { //保存当前操作的像素矩阵
private int currentPixArray[]=null; //图像的路径
private String fileString=null;
//用于显示图像的标签
private JLabel imageLabel=null; //加载的图像
private BufferedImage newImage; //图像的高和宽
private int h,w; //保存历史操作图像矩阵
private LinkedList <int[]> imageStack=new LinkedList <int []>();
private LinkedList <int []> tempImageStack=new LinkedList <int []>();
public JpegToBmpFrame(String title){
super(title);
this.setSize(800,600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//创建菜单
JMenuBar jb=new JMenuBar();
JMenu fileMenu=new JMenu("文件");
jb.add(fileMenu);
JMenuItem openImageMenuItem=new JMenuItem("打开");
fileMenu.add(openImageMenuItem);
openImageMenuItem.addActionListener(new OpenListener());
JMenuItem exitMenu=new JMenuItem("退出");
fileMenu.add(exitMenu);
exitMenu.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
System.exit(0);
}
});
JMenu operateMenu=new JMenu("操作");
jb.add(operateMenu);
JMenuItem ChToBmpMenuItem=new JMenuItem("转成BMP");
operateMenu.add(ChToBmpMenuItem);
//ChToBmpMenuItem.addActionListener(new ChToBmpListener());
this.setJMenuBar(jb);
imageLabel=new JLabel("");
JScrollPane pane = new JScrollPane(imageLabel);
this.add(pane,BorderLayout.CENTER);
this.setVisible(true);
} //////////////////菜单监听器\\\\\\\\\\\\\\\\\\\\\\\
/*private class ChToBmpListener implements ActionListener{
public void ActionDo(ActionEvent c){
try
{
//利用系统输入设备作为文件输入流
FileInput
}
}
}*/
//////////////////菜单监听器\\\\\\\\\\\\\\\\\\\\\\\
private class OpenListener implements ActionListener{
public void actionPerformed(ActionEvent e){
JFileChooser jc=new JFileChooser();
int returnValue=jc.showOpenDialog(null);
if (returnValue ==JFileChooser.APPROVE_OPTION) {
File selectedFile =jc.getSelectedFile();
if (selectedFile != null) {
fileString=selectedFile.getAbsolutePath();
try{
newImage =ImageIO.read(new File(fileString));
w=newImage.getWidth();
h=newImage.getHeight();
currentPixArray=getPixArray(newImage,w,h);
imageStack.clear();
tempImageStack.clear();
imageStack.addLast(currentPixArray);
imageLabel.setIcon(new ImageIcon(newImage));
}catch(IOException ex){
System.out.println(ex);
}
}
}
JpegToBmpFrame.this.repaint();
JpegToBmpFrame.this.pack();
}
}
//////////////////获取图像像素矩阵\\\\\\\\\\\\\\\\\\\
private int[]getPixArray(Image im,int w,int h){
int[] pix=new int[w*h];
PixelGrabber pg=null;
try{
pg = new PixelGrabber(im, 0, 0, w, h, pix, 0, w);
if(pg.grabPixels()!=true)
try{
throw new java.awt.AWTException("pg error"+pg.status());
}catch(Exception eq){
eq.printStackTrace();
}
} catch(Exception ex){
ex.printStackTrace(); }
return pix;
} //////////////////显示图片\\\\\\\\\\\\\\\\\\\\\\\
private void showImage(int[] srcPixArray){
Image pic=createImage(new MemoryImageSource(w,h,srcPixArray,0,w));
ImageIcon ic=new ImageIcon(pic);
imageLabel.setIcon(ic);
imageLabel.repaint();
}
public static void main(String[] args) {
new JpegToBmpFrame("ShowImage");
} }
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货