问题背景:我在做GEF的时候想把画出来的图片导出,生成一个gif格式的图片文件。使用SWT中Image类的getImageData()方法,但是图片很大的时候会出现错误,我分析原因可能是图片太大,无法一次性读出数据。于是我将大图片分割成若干小图片,将每个小图片依次存入到imageLoader.data中,并转换为ByteArrayOutputStream形式,最终生成了若干小图片。
问题目标:如何将若干个ByteArrayOutputStream合并在一起,生成完整的一张大图。
我的想法:我使用FileOutputStream的write方法,每次只能重新生成一个文件。是不是应该使用类似“追加”功能的方法,依次把多个小图片的ByteArrayOutputStream写到同一个文件里面,最终生成一个完整的大图片文件。我还没有找到这样的方法。
不知道我的思路对不对,请各位高手给些提示。谢谢
问题目标:如何将若干个ByteArrayOutputStream合并在一起,生成完整的一张大图。
我的想法:我使用FileOutputStream的write方法,每次只能重新生成一个文件。是不是应该使用类似“追加”功能的方法,依次把多个小图片的ByteArrayOutputStream写到同一个文件里面,最终生成一个完整的大图片文件。我还没有找到这样的方法。
不知道我的思路对不对,请各位高手给些提示。谢谢
2 你必须得知道GIF图形的byte编码方式才能 “拼”图形,参考 http://en.wikipedia.org/wiki/GIF你这么问问题就是无厘头,不能给别人提供准确地信息,别人也不知道你要干什么:)
我在IFigure上面绘制了一个图片,用SWT的Image类的image.getImageData()试图取得图片数据。当图片不太大的时候运行没有问题,当图片超过一定范围,比如占用的面积很大时,image.getImageData()方法运行不过去。不明白其中缘由。请高手指教,谢谢*_*
try{
ImageLoader il = new ImageLoader();
il.data = new ImageData[] { img.getImageData() }; // 保存地址和保存图片的类型
il.save("c:/test.bmp", SWT.IMAGE_BMP);
}catch(Error o){
System.out.println("MemoryError:" + o);
}
当读取大图片的时候,捕获了下面的错误:
MemoryError:java.lang.OutOfMemoryError: Java heap space我感觉是不是image.getImageData()对图片大小有限制啊,可是我没有找到相关的文档或者帮助,请高手指点,给点提示。谢谢
2 不要使用裸byte[],那样全在内存中了,save之前不是有load(xx)吗?使用I/O,开辟一块固定的buffer,比如byte[4096]。
先把贴结了,继续研究方法二*_*