我正在尝试在 Java 中创建图像马赛克。我计算我正在创建的新图像的大小,然后对于将成为马赛克一部分的每个子图像,我进行一次绘制调用。
在伪代码中:
create buffered image big enough to hold entire mosaic
create Graphics2D context from that image
for each buffered subimage that will be a part of the mosaic
draw the subimage on the graphics context of big bufferedimage
g2.drawImage(myImage, x,y,width,height,null,null)
有一个更好的方法吗?我希望有某种直接复制操作可用,因为我不想将子图像转换或缩放成更大的图像。类似于每个子图像的光栅的arraycopy。我注意到有一个接受 Raster 对象的 setData 方法,但该方法指出 Raster 必须位于相同的坐标空间中。
有什么想法吗?这是我的程序中的一个瓶颈,我希望它尽可能快。
编辑:事实证明我错了(通常在没有硬数据的情况下做出假设)关于瓶颈在哪里。我有一个错误,即一遍又一遍地读取多张 3MB 图片,而不是使用缓存在内存中的缩小版本的图像。当我进行修复时,我的运行时间从 50 分钟变为 15 秒。