如何把Image对象存为.jpg文件?

mattus_zhao 2003-08-13 11:18:02
我现在根据一个缓冲区数组imageBuffer得到了一个Image对象im,不知道有没有办法把它存为.jpg文件?
谢谢!
...全文
380 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
satangf 2004-03-09
  • 打赏
  • 举报
回复
a
swj_20 2004-03-08
  • 打赏
  • 举报
回复
mark
mattus_zhao 2003-08-13
  • 打赏
  • 举报
回复
看来我没有把问题说清楚。
我要做的程序是这样,我有一幅demo.jpg的文件,然后我读入这幅图片,使用了自己的加密算法,比如是这样:myEncode("demo.jpg"),然后把加密的文件存为demo.ecd。我现在要写一个解密程序,首先读入这个文件,大概是这样:byte[] readFile("demo.ecd"),就是读入demo.ecd文件。然后得到一个字节数组byteBuffer,接着我对这个数组进行解密,使用方法就是:byte[] mydecode(byteBuffer);得到了字节数组imageBuffer, 接着我使用以下方法从这个imageBuffer字节数组得到了一个Image类的对象:Image image = Toolkit.getDefaultToolkit().createImage(byteBuffer);(你可以看看JDK对这个方法的介绍)。这样我就得到了一个Image类的对象image。现在我的问题就是要把这个Image类的对象image 写为一个jpe文件demo.jpg,既是还原了。
不知道你看明白没有?
还有,Image类如果是抽象类的话,它怎么可能创造实例呢?
cbhyk 2003-08-13
  • 打赏
  • 举报
回复
如果不行,
Image yourImg = ...
BufferedImage img = new BufferedImage(yourImg.getWidth(), yourImg.getHeight(), BufferedImage.TYPE_INT_RGB);
img.getGraphics().drawImage(yourImg, 0, 0, null);
...
cbhyk 2003-08-13
  • 打赏
  • 举报
回复
Image是抽象类,在sun的JDK中已知的实现类只有BufferedImage,你的Image对象就该也是BufferedImage的实例,用类型转换试试看.
Image yourImg = ...
BufferedImage img = (BufferedImage) yourImg;

mattus_zhao 2003-08-13
  • 打赏
  • 举报
回复
好像不能把Image类的对象直接转化为BufferedImage类的对象,因为Image类是BufferdImage类的父类。
Image im;
BufferedImage bi;
im = bi; (可行)
bi = im; (编译可以通过,但是我觉得会出问题)
不知道这个BufferImage的对象如何创建?
mattus_zhao 2003-08-13
  • 打赏
  • 举报
回复
不过你使用的是BufferedImage类,而我使用的是Imge类,好像BufferedImage类是继承了Image类的,那么如何把一个Imge类的对象转化为一个BufferedImage类的对象?
cbhyk 2003-08-13
  • 打赏
  • 举报
回复
BufferedImage img = ...//Your Image

FileOutputStream fos = new FileOutputStream("test.jpg");
com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(fos);
encoder.encode(img);
fos.close();
mattus_zhao 2003-08-13
  • 打赏
  • 举报
回复
不用JAI可不可以?
mattus_zhao 2003-08-13
  • 打赏
  • 举报
回复
不错,我的程序完成了。
谢谢 cbhyk 的帮助!
j4sxw 2003-08-13
  • 打赏
  • 举报
回复
关注
cbhyk 2003-08-13
  • 打赏
  • 举报
回复
public static void main(String[] args)
{
try
{
FileInputStream fis = new FileInputStream("test.jpg");
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();

Image yourImg = Toolkit.getDefaultToolkit().createImage(buffer);
MediaTracker tracker = new MediaTracker(new JLabel());
tracker.addImage(yourImg, 1);
tracker.waitForID(1);

BufferedImage img = new BufferedImage(yourImg.getWidth(null), yourImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
img.getGraphics().drawImage(yourImg, 0, 0, null);

FileOutputStream fos = new FileOutputStream("test1.jpg");
com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(fos);
encoder.encode(img);
fos.close();
System.exit(0);
}
catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
}
badbob 2003-08-13
  • 打赏
  • 举报
回复
用cbhyk的方法肯定是可以的,不论image还是bufferedimage,我前段时间就这样写过一个画图程序,抽象类不能new得一个"抽象"实例,但可以定义变量,用它引用实现了其抽象方法的子类对象,你试试看用toolkit(它也是抽象类)的create方法得到的image是否是bufferedimage对象(肯定是image某一子类对象)?好像一般image都可以直接cast的的

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧