java图像未显示

java图像未显示,java,image,loops,for-loop,copy,Java,Image,Loops,For Loop,Copy,我正在写一个程序,在这个程序中,我拍摄单独的图像,并将它们作为一张完整的图片复制到一个模板中。但是我不知道如何复制单独的图像,这样它们就不会彼此重叠。我注意到第一个和第二个图像被复制并放置在一起形成图像,但之后其他三个图像就堆积在第二个图像的顶部。我搞不懂 如何将它们分开以完成图像。如果有人能告诉我如何解决这个问题,那就太好了。 谢谢 我的代码: import java.awt.*; class PanoramaTester { public static void main(Strin

我正在写一个程序,在这个程序中,我拍摄单独的图像,并将它们作为一张完整的图片复制到一个模板中。但是我不知道如何复制单独的图像,这样它们就不会彼此重叠。我注意到第一个和第二个图像被复制并放置在一起形成图像,但之后其他三个图像就堆积在第二个图像的顶部。我搞不懂 如何将它们分开以完成图像。如果有人能告诉我如何解决这个问题,那就太好了。 谢谢

我的代码:

import java.awt.*;
class PanoramaTester
{
    public static void main(String[] args)
    {
        Picture sourcePicture = new Picture("Mars1.jpg");
        Picture sourcePicture2 = new Picture("Mars2.jpg");
        Picture sourcePicture3 = new Picture("Mars3.jpg");
        Picture sourcePicture4 = new Picture("Mars4.jpg");
        Picture sourcePicture5 = new Picture("Mars5.jpg");
        Picture targetPicture1 = new Picture(1150,400);

        Pixel sourcePixel, targetPixel = null;
        Color sourceColor, targetColor = null;

        for(int y = 0; y < sourcePicture.getHeight(); y++)
        {
            for(int x = 0; x < sourcePicture.getWidth(); x++)
            {
                sourcePixel = sourcePicture.getPixel(x,y);
                sourceColor = sourcePixel.getColor();
                targetPixel = targetPicture1.getPixel(x,y);
                targetPixel.setColor(sourceColor);
            }
        }

        for(int y = 0; y < sourcePicture2.getHeight(); y++)
        {
            for(int x = 0; x < sourcePicture2.getWidth(); x++)
            {
                sourcePixel = sourcePicture2.getPixel(x,y);
                sourceColor = sourcePixel.getColor();
                targetPixel = targetPicture1.getPixel(x + sourcePicture.getWidth(), y);
                targetPixel.setColor(sourceColor);
            }
        }

        for(int y = 0; y < sourcePicture3.getHeight(); y++)
        {
            for(int x = 0; x < sourcePicture3.getWidth(); x++)
            {
                sourcePixel = sourcePicture3.getPixel(x,y);
                sourceColor = sourcePixel.getColor();
                targetPixel = targetPicture1.getPixel(x + sourcePicture2.getWidth(), y);
                targetPixel.setColor(sourceColor);
            }
        }

        for(int y = 0; y < sourcePicture4.getHeight(); y++)
        {
            for(int x = 0; x < sourcePicture4.getWidth(); x++)
            {
                sourcePixel = sourcePicture4.getPixel(x,y);
                sourceColor = sourcePixel.getColor();
                targetPixel = targetPicture1.getPixel(x + sourcePicture3.getWidth(), y);
                targetPixel.setColor(sourceColor);
            }
        }

        for(int y = 0; y < sourcePicture5.getHeight(); y++)
        {
        for(int x = 0; x < sourcePicture5.getWidth(); x++)
            {
                sourcePixel = sourcePicture5.getPixel(x,y);
                sourceColor = sourcePixel.getColor();
                targetPixel = targetPicture1.getPixel(x + sourcePicture4.getWidth(), y);
                targetPixel.setColor(sourceColor);
            }
        }

        targetPicture1.show();
        targetPicture1.write("FinalPanorama.jpg");
    }        
}
import java.awt.*;
类全景测试器
{
公共静态void main(字符串[]args)
{
图片来源图片=新图片(“Mars1.jpg”);
Picture sourcePicture2=新图片(“Mars2.jpg”);
Picture sourcePicture3=新图片(“Mars3.jpg”);
Picture sourcePicture4=新图片(“Mars4.jpg”);
Picture sourcePicture5=新图片(“Mars5.jpg”);
图片目标图片1=新图片(1150400);
像素源像素,targetPixel=null;
Color sourceColor,targetColor=null;
对于(int y=0;y
从代码的快速回顾来看,我认为这里的问题是,您所有的源图片可能大小都差不多,如果不是完全一样的话

因此,当您绘制第一张图片时,您使用左侧作为偏移来绘制它,因为您不会向该位置“添加”任何内容:

targetPixel = targetPicture1.getPixel(x,y);
第二张图片将图片的宽度“添加”到x位置,如下所示:

targetPixel = targetPicture1.getPixel(x + sourcePicture.getWidth(), y);
对于第三张图片,您尝试执行相同的操作,但仅使用第二张图片的宽度:

targetPixel = targetPicture1.getPixel(x + sourcePicture2.getWidth(), y);
如果我们假设sourcePicture2的宽度与sourcePicture的宽度大致相同,那么我们将在第二张图片上绘制第三张图片,而不是以sourcePicture2+sourcePicture的宽度进行偏移

e、 g:

这样,它会推动第三张图片,使其偏移之前绘制的两张图片的宽度

targetPixel = targetPicture1.getPixel(x + sourcePicture.getWidth() + sourcePicture2.getWidth(), y);