java jai例子_java – 使用JAI将swing组件写入大型TIFF图像

我不得不加载并存储一个大的tiff(59392x40192px)与JAI.我的解决方案是:TiledImages.

我使用了TiledImage,因为我需要tile和subimages.

要使用TiledImage效率,您应该使用您喜欢的磁贴大小来构建它. JAI使用TileCache,因此当不需要时,整个Image都不会在内存中.

要在文件中编写TiledImage,请使用选项“writeTiled”(避免使用OutOfMemory,因为它逐个tile地写入):

public void storeImage(TiledImage img, String filepath) {

TIFFEncodeParam tep = new TIFFEncodeParam();

//important to avoid OutOfMemory

tep.setTileSize(256, 256);

tep.setWriteTiled(true);

//fast compression

tep.setCompression(TIFFEncodeParam.COMPRESSION_PACKBITS);

//write file

JAI.create("filestore", img, filepath, "TIFF", tep);

}

它适用于高达690mb(压缩)的图像,对于尚未测试的较大图像.

但是,如果你正在使用32位WinXP,你可能无法拥有更多的1280m HeapSpace大小,这仍然是Java VM的限制.

我的TiledImage是使用我的图像源数据中的IndexedColorModel构建的:

//here you create a ColorModel for your Image

ColorModel cm = source.createColorModel();

//then create a compatible SampleModel, with the tilesize

SampleModel sm = cm.createCompatibleSampleModel(tileWidth,tileHeight);

TiledImage image = new TiledImage(0, 0, imageWidth, imageHeight, 0, 0, sm, cm);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值