From ada352a02ca8917fb31946d304840af3db85fa94 Mon Sep 17 00:00:00 2001 From: OMGeeky Date: Sun, 10 Sep 2023 17:15:28 +0200 Subject: [PATCH] implement ignoring fully transparent sprites --- .../ui/sprites/SpriteChooser.java | 12 ++++--- .../atcontentstudio/utils/SpriteUtils.java | 34 +++++++++++++++++++ 2 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 src/com/gpl/rpg/atcontentstudio/utils/SpriteUtils.java diff --git a/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpriteChooser.java b/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpriteChooser.java index 59b2d5c..537202f 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpriteChooser.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/sprites/SpriteChooser.java @@ -4,7 +4,6 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; -import java.awt.image.WritableRaster; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; @@ -15,6 +14,7 @@ import com.gpl.rpg.atcontentstudio.ATContentStudio; import com.gpl.rpg.atcontentstudio.model.Project; import com.gpl.rpg.atcontentstudio.model.sprites.Spritesheet; import com.gpl.rpg.atcontentstudio.model.sprites.Spritesheet.Category; +import com.gpl.rpg.atcontentstudio.utils.SpriteUtils; public class SpriteChooser extends JDialog { @@ -97,11 +97,14 @@ public class SpriteChooser extends JDialog { Point nextFreeSlot = new Point(0, 0); int i; - Image img; + BufferedImage img; group = new ButtonGroup(); for (Spritesheet sheet : spritesheets) { - i = 0; - while ((img = sheet.getImage(i)) != null) { + i = -1; + while ((img = sheet.getImage(++i)) != null) { + if (SpriteUtils.checkIsImageEmpty(img)) { + continue; + } IconButton button = new IconButton(img, sheet.id, i); group.add(button); if (sheet.spriteWidth == STD_WIDTH && sheet.spriteHeight == STD_HEIGHT) { @@ -150,7 +153,6 @@ public class SpriteChooser extends JDialog { } nextFreeSlot.setLocation(c.gridx, c.gridy); } - i++; } } diff --git a/src/com/gpl/rpg/atcontentstudio/utils/SpriteUtils.java b/src/com/gpl/rpg/atcontentstudio/utils/SpriteUtils.java new file mode 100644 index 0000000..05af148 --- /dev/null +++ b/src/com/gpl/rpg/atcontentstudio/utils/SpriteUtils.java @@ -0,0 +1,34 @@ +package com.gpl.rpg.atcontentstudio.utils; + +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; + +public final class SpriteUtils { + + /** + * Check if the image is empty (transparent ) + * + * @param img The image to check + * @return true if the image is empty + */ + public static boolean checkIsImageEmpty(BufferedImage img) { + int width = img.getWidth(null); + int height = img.getHeight(null); + WritableRaster raster = img.getAlphaRaster(); + if (raster == null) { + return false; + } + for (int x = 0; x < width; x++) { + for (int y = 0; y < height; y++) { + //get pixel alpha value + int alpha = raster.getSample(x, y, 0); + //if alpha is not 0 then the pixel is not transparent + if (alpha != 0) { + return false; + } + } + } + //no non-transparent pixel found + return true; + } +}