【发布时间】:2016-11-19 02:11:31
【问题描述】:
我遇到了一个问题,即作为缓冲图像加载的图像正确包含其 Alpha 通道。但是当作为参数传递时,alpha 通道会丢失。
我像这样加载图像:
MousePointer = ImageIO.read(getClass().getResourceAsStream("sprites/Mouse-sheet.png"));
然后我这样画(alpha通道保持不变):
g.drawImage(Sprites.MousePointer, mouse.x, mouse.y, 64, 64, null);
但是当我使用自己的函数绘制时,alpha通道丢失了:
mouseAnimation.DrawAbsolute(Sprites.MousePointer, g, mouse.x, mouse.y, 4, 4, deltaTime);
为什么 alpha 通道会丢失,java 变量是指针,因此是按引用传递的,所以没有意义?我能做些什么来预防它?
您可以在此处查看结果:YouTube video 我只显示处于损坏状态的图像,当时我将一种方法与另一种方法混淆,结果没有任何改变。
【问题讨论】:
-
它只能在你的 mouseAnimation 函数中出现问题。正如你所说,Java 只使用指针,所以给你的函数的图像是一样的。
-
从视频中,您似乎将
Color.white传递给了您的DrawAbsolute方法,而这个Color被传递给了采用drawImage参数的drawImage方法之一。这种方法正是你不想要的。它用您传递的颜色替换 alpha... -
@haraldK 感谢您的评论。我一直以为那个参数是为了着色,基本上白色是为了保持原来的颜色。我尝试了 new Color(256, 256, 256, 0) 但无济于事。不过,我会继续走这条路。更改为 Color.cyan 完全符合您的预期。
标签: java pass-by-reference bufferedimage alpha