用java将图像缝合在一起
我正在尝试使用java将一些图像缝合在一起。我有一堆我想缝合在一起的图像,它们都是相同的尺寸,所以我想这实际上只是一个将它们排列在一起的问题。我有它的工作,但它非常缓慢,可能非常内存密集。我想知道是否有更简单的方法:用java将图像缝合在一起,java,image-processing,javax.imageio,java-io,Java,Image Processing,Javax.imageio,Java Io,我正在尝试使用java将一些图像缝合在一起。我有一堆我想缝合在一起的图像,它们都是相同的尺寸,所以我想这实际上只是一个将它们排列在一起的问题。我有它的工作,但它非常缓慢,可能非常内存密集。我想知道是否有更简单的方法: public static void main(String[] args) throws IOException { int dim = 256; BufferedImage merged = null; for(int y
public static void main(String[] args) throws IOException
{
int dim = 256;
BufferedImage merged = null;
for(int y = 0; y<10;y++)
{
for(int x = 0; x<10;x++)
{
URL url = new URL(someURL);
BufferedImage nextImage = ImageIO.read(url);
if(merged==null)
merged=nextImage;
else
{
BufferedImage tempMerged;
tempMerged = new BufferedImage(10*dim,10*dim,merged.getType());
//Write first image
for(int xx=0;xx<merged.getWidth();xx++)
for(int yy=0;yy<merged.getHeight();yy++)
tempMerged.setRGB(xx,yy,merged.getRGB(xx,yy));
//Write img2
for(int xx=0;xx<dim;xx++)
{
for(int yy=0;yy<dim;yy++)
{
int destX = (x*dim)+xx;
int destY = (y*dim)+yy;
tempMerged.setRGB(destX,destY,nextImage.getRGB(xx,yy));
}
}
merged=tempMerged;
}
System.out.println("Stitched image at "+x+","+y);
}
}
ImageIO.write(merged, "png", new File("merged.png"));
}
publicstaticvoidmain(字符串[]args)引发IOException
{
int dim=256;
BuffereImage合并=空;
对于(int y=0;yAFAIK),这里要做的是将层写入图像。但是,png格式不支持这一点
您必须创建一个两倍于源图像大小的新图像(例如,对于2x 512x512,新图像应为512x1024或1024x512)。然后将源图像渲染到目标图像的相应区域/矩形
@Thomas:您必须创建一个大小为源图像两倍的新图像(例如,对于2x 512x512,新图像应为512x1024或1024x512)。然后将源图像渲染到目标图像的相应区域/矩形
例如TiledImageWrite.java
column.png
我弄明白了它为什么会变慢。事实上,我不想把图像合并在一起,而是想把一堆图像缝合在一起。我所做的是重写原始图像,而我真正想做的是添加到原始图像中。现在快多了!我明白了,我该怎么做?我不确定搜索什么术语为了让我开始更新帖子以反映变化
import java.awt.image.BufferedImage;
import java.awt.*;
import javax.swing.*;
import java.net.URL;
import java.io.File;
import javax.imageio.ImageIO;
class TiledImageWrite {
public static void main(String[] args) throws Exception {
URL dayStromloUrl = new URL("https://i.stack.imgur.com/OVOg3.jpg");
URL nightStromloUrl = new URL("https://i.stack.imgur.com/lxthA.jpg");
final BufferedImage dayStromloImage = ImageIO.read(dayStromloUrl);
final BufferedImage nightStromloImage = ImageIO.read(nightStromloUrl);
final int width = dayStromloImage.getWidth();
final int height = dayStromloImage.getHeight();;
final BufferedImage columnImage =
new BufferedImage(width,2*height,BufferedImage.TYPE_INT_RGB);
final BufferedImage rowImage =
new BufferedImage(2*width,height,BufferedImage.TYPE_INT_RGB);
SwingUtilities.invokeLater( new Runnable() {
public void run() {
JPanel gui = new JPanel(new BorderLayout(3,3));
Graphics2D g2dColumn = columnImage.createGraphics();
g2dColumn.drawImage(dayStromloImage,0,0, null);
// start this one at 'height' down the final image
g2dColumn.drawImage(nightStromloImage,0,height, null);
Graphics2D g2dRow = rowImage.createGraphics();
g2dRow.drawImage(dayStromloImage,0,0, null);
// start this one at 'width' across the final image
g2dRow.drawImage(nightStromloImage,width,0, null);
gui.add(new JLabel(new ImageIcon(columnImage)),BorderLayout.CENTER);
gui.add(new JLabel(new ImageIcon(rowImage)),BorderLayout.SOUTH);
JOptionPane.showMessageDialog(null, gui);
}
} );
ImageIO.write(columnImage, "png", new File("column.png"));
ImageIO.write(rowImage, "png", new File("row.png"));
}
}