在缓冲图像上绘图时,RGB 颜色会随着包含 alpha 的变化而变化
Posted
技术标签:
【中文标题】在缓冲图像上绘图时,RGB 颜色会随着包含 alpha 的变化而变化【英文标题】:RGB colors changing on including alpha while drawing on Buffered Image 【发布时间】:2020-02-21 17:10:21 【问题描述】:我正在尝试写一个缓冲图像并读回它的颜色。尽管 alpha 保持不变,但 RGB 颜色似乎发生了变化。我无法理解这背后的原因。任何有关解决此问题的帮助表示赞赏。我需要图像返回与我所写内容完全相同的颜色。
try
BufferedImage img=new BufferedImage(256, 256,
BufferedImage.TYPE_INT_ARGB);
Graphics graphics =
img.createGraphics();
int r=45;int g=45; int b=100; int a=50;
System.out.println("Red "+r+" Green "+g+" Blue "+b+" alpha "+a);
graphics.setColor(new Color(r,g,b,a));
graphics.fillRect(10,10, 40, 40);
Integer i=img.getRGB(23,23);
Color c=new Color(i,true);
System.out.println("Going to read color back");
System.out.println("Red "+c.getRed()+" Green "+c.getGreen()+" Blue "+c.getBlue()+" alpha "+c.getAlpha());
catch (Exception e)
e.printStackTrace();
程序的输出: 红色 45 绿色 45 蓝色 100 阿尔法 50
要读回颜色
红46绿46蓝102阿尔法50
【问题讨论】:
当您使用 alpha 颜色填充矩形时,它会与背景颜色混合 背景没有颜色。你可以查看我的代码!我认为 BufferedImage.TYPE_INT_ARGB 有问题 你为什么需要这个???如果您想要精确的颜色,请改用数组!!! 我通过识别独特的颜色将数据存储在“地图图块”上。现在,如果我添加 alpha,我可以有 256*256*256*256 唯一颜色,因此可能是身份。 【参考方案1】:如果您想保护源颜色,则应在使用 alpha 绘制任何图像之前添加以下代码。这解决了我的问题。
graphics.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC));
Alpha Composite Doc Alpha Composite tutorial
【讨论】:
以上是关于在缓冲图像上绘图时,RGB 颜色会随着包含 alpha 的变化而变化的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C 如何避免在具有 UIBezierPath 笔触颜色的相同颜色图像上绘图