【问题标题】:BufferedImage loses alpha when passed as a parameterBufferedImage 作为参数传递时会丢失 alpha
【发布时间】: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


【解决方案1】:

对于遇到此问题的其他人(来自一种语言,在这种语言中,您总是像我一样在绘图时被要求提供颜色),我可以通过一个简单的更改来解决它。我刚刚删除了颜色参数。

就像@haraldK 指出的那样,与其他语言不同,颜色不是用于图像的着色,而是将所有 alpha 更改为该颜色。

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 2012-09-28
    • 1970-01-01
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-02
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多