我正在尝试编辑一个图像,以便它有一个"彩虹"编辑它。要做到这一点,我只想填写单独的行,用彩虹的颜色填充图像。但是,如果我这样做,颜色将覆盖图像。所以,我想为我的颜色添加透明度。但是,当我尝试这样做时,我会遇到标题中提到的错误消息。这是我的代码:
/**
* This program takes a picutre, and places a special effect on it that colors it similar to how a rainbow would be.
*
* @author Dylan Hubbs
* @version 08/03/16
*/
import java.awt.*;
class Rainbow
{
Rainbow()
{
}
public void rainbowEffect(Picture pictureObj)
{
int redValue = 0; int greenValue = 0; int blueValue = 0;
Pixel rainbowTargetPixel = new Pixel(pictureObj, 0,0);
Color rainbowPixelColor = null;
Color [] rainbowPalette = {new Color(255, 0, 0, .5), new Color(255, 200, 0, .5), Color(255, 255, 0, .5), Color(0, 255, 0, .5), Color(0, 0, 255, .5), new Color(138, 43, 226, .5), new Color(75, 0, 130, .5)};
for(int y=0; y < pictureObj.getHeight(); y++)
{
for(int x = 0; x < pictureObj.getWidth(); x++)
{
rainbowTargetPixel = pictureObj.getPixel(x,y);
if(y >= 0 && y <= 50)
rainbowTargetPixel.setColor(rainbowPalette[0]);
if(y >= 51 && y <= 100)
rainbowTargetPixel.setColor(rainbowPalette[1]);
if(y >= 101 && y <= 150)
rainbowTargetPixel.setColor(rainbowPalette[2]);
if(y >= 151 && y <= 200)
rainbowTargetPixel.setColor(rainbowPalette[3]);
if(y >= 201 && y <= 250)
rainbowTargetPixel.setColor(rainbowPalette[4]);
if(y >= 251 && y <= 300)
rainbowTargetPixel.setColor(rainbowPalette[5]);
}
}
pictureObj.explore();
pictureObj.write("RainbowWashingtonMonument.jpg");
pictureObj.show();
}
}
public class RainbowTester
{
public static void main(String[] args)
{
Picture pictureObj = new Picture("washingtonmonument.jpg");
pictureObj.explore();
Rainbow rb = new Rainbow();
rb.rainbowEffect(pictureObj);
}
}
因此,错误发生在
{new Color(255,0,0,.5)
并且,我确定该错误将继续用于阵列中的其他颜色。当我尝试在每个方法的末尾添加浮动值时,不会发生此错误...但是,我认为我可以添加浮动数字以获得透明度?请帮忙!
答案 0 :(得分:0)
Java无法确定要调用的构造函数。由于您为alpha传递0.5,因此您可能希望获得四个float
s:
new Color(1F, 0, 0, .5F)
请注意使用1
代替255
,因为此构造函数的值范围为0..1。
构造函数采用四个int
是另一种可能性,在这种情况下,您需要传递128
作为alpha参数:
new Color(255, 0, 0, 128)
答案 1 :(得分:0)
https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html
显示Color的多个构造函数。 一个可能适合你的人:
Color(int r,int g,int b,int a)
而不是0.5( double ),您只需输入128(整数)。
答案 2 :(得分:0)
透明度称为alpha值。当所有其他RGB值都是浮点数时,它可以是浮点数;当所有RGB值都是int时,它可以是int。 看看这里,注意awt.Color构造函数,并选择最符合您需求的构造函数: https://docs.oracle.com/javase/7/docs/api/java/awt/Color.html
答案 3 :(得分:0)
构造函数很少:
public Color(int r, int g, int b)
public Color(int r, int g, int b, int a)
public Color(int rgb)
public Color(int rgba, boolean hasalpha)
public Color(float r, float g, float b)
public Color(float r, float g, float b, float a)
public Color(ColorSpace cspace, float components[], float alpha)
您可以使用
public Color(int r, int g, int b, int a)
(使用指定的红色,绿色,蓝色和alpha值创建sRGB颜色,范围为(0 - 255)。)
或
public Color(float r, float g, float b, float a)
(使用指定的红色,绿色,蓝色和alpha值创建sRGB颜色(0.0 - 1.0)。渲染中使用的实际颜色取决于在给定颜色空间的情况下找到最佳匹配可用于特定的输出设备。)