Проблемы с BufferedImage SubImages - PullRequest
0 голосов
/ 22 декабря 2018

В настоящее время я пытаюсь заставить мою java-программу загружать отдельные спрайты из листа спрайтов.Когда я пытаюсь получить Желтый квадрат в этом листе спрайта
The yellow square in this sprite sheet.
Однако, я получаю это
this.

До этого я мог загрузитьи визуализировать весь файл PNG без проблем, и я не уверен, что причина этого не работает.Я поместил фрагменты кода, которые я использую для загрузки изображений, рендеринга изображений и получения изображения.Я все еще немного новичок в Java, поэтому я не уверен, есть ли лучшее решение для этого

//The code I use to load a PNG as a BufferedImage
public BufferedImage loadImage(String path) {
    try {
      BufferedImage loadedImage = ImageIO.read(new FileInputStream(path));
      BufferedImage formattedImage = new BufferedImage(loadedImage.getWidth(), loadedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
      formattedImage.getGraphics().drawImage(loadedImage, 0, 0, null);
      return formattedImage;
    } catch (IOException e) {
      e.printStackTrace();
      return null;
    }


    //The code I use to render an image onto the screen
    public void renderImage(BufferedImage image, int xpos, int ypos) {
      int[] imgpixels = ((DataBufferInt) image.getRaster().getDataBuffer()).getData();

      for (int y = 0; y < image.getHeight(); y++) {
        for (int x = 0; x < image.getWidth(); x++) {
          if (!(x + xpos > getScreenWidth() - 1) && !(y + ypos > getScreenHeight() - 1) && !(x + xpos < 0) && !(y + ypos < 0)) {
            pixels[(x + xpos) + (y + ypos) * getScreenWidth()] = imgpixels[x + y * image.getWidth()];
          }
        }
      }
    }

    //the code I used to get the subimage
    public BufferedImage getImage(int index) {
      int i = index % (row * col);
      int x = tileX * (i % col);
      int y = tileY * (i % row);
      return spriteSheet.getSubimage(x, y, tileX, tileY);
      //still does the same thing if I were to put in spriteSheet.getSubimage(0, 0, 16, 16)
    }
...