【发布时间】:2018-04-23 08:28:57
【问题描述】:
我正在开发一个 2D 平台游戏,我有一个包含图块和块的精灵的精灵表。
我注意到透明精灵背后有一个粉红色的背景,所以我认为 Java 没有将精灵加载为 PNG,我尝试在新的缓冲图像上重新绘制精灵,逐个像素检查是否像素是 R=255, G=63, B=52 但不幸的是,代码也无法检测到这一点点我没有更多的选择可以尝试。
加载精灵的类是:
public class SpriteSheet {
private BufferedImage image;
public SpriteSheet(BufferedImage image) {
this.image = image;
}
public BufferedImage grabImage(int col, int row, int width, int height) {
BufferedImage alpha = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
BufferedImage img = image.getSubimage(
(col * width) - width,
(row * height) - height,
width,
height);
int w = img.getWidth();
int h = img.getHeight();
for(int y = 0; y < h; y++) {
for(int x = 0; x < w; x++) {
int pixel = img.getRGB(x, y);
int red, green, blue;
red = (pixel >> 16) & 0xff;
green = (pixel >> 8) & 0xff;
blue = (pixel) & 0xff;
if(red == 255 && green == 63 && blue == 52)
alpha.setRGB(x, y, new Color(0, 0, 0, 0).getRGB());
else
alpha.setRGB(x, y, pixel);
}
}
return alpha;
}
}
加载精灵表的类是:
public class Texture {
SpriteSheet bs, ss;
private BufferedImage block_sheet = null;
public BufferedImage[] block = new BufferedImage[3];
public Texture() {
BufferedImageLoader loader = new BufferedImageLoader();
try {
block_sheet = loader.loadImage("/tiles.png");
} catch(Exception e) {
e.printStackTrace();
}
bs = new SpriteSheet(block_sheet);
getTextures();
}
private void getTextures() {
block[0] = bs.grabImage(1, 1, 32, 32);
block[1] = bs.grabImage(2, 1, 32, 32);
block[2] = bs.grabImage(4, 1, 32, 32);
}
}
如何去除粉红色的背景并保持透明度?
【问题讨论】:
-
我认为发生了什么,您正在将图像加载为不支持 Alpha 通道的格式。问题将出现在您最初加载图像的位置。那么你可以将代码发布到你的图像加载器
标签: java sprite transparency bufferedimage