Java 找不到适合颜色的构造函数(int、int、int、double)

Java 找不到适合颜色的构造函数(int、int、int、double),java,Java,我试图编辑一个图像,使它有一个“彩虹”编辑它。要做到这一点,我只想在单独的行中填充,用彩虹的颜色填充图像。然而,如果我这样做,颜色将覆盖图像。所以,我想给我的颜色增加透明度。然而,当我尝试这样做时,我遇到了标题中提到的错误消息。这是我的密码: /** * This program takes a picutre, and places a special effect on it that colors it similar to how a rainbow would be. * *

我试图编辑一个图像,使它有一个“彩虹”编辑它。要做到这一点,我只想在单独的行中填充,用彩虹的颜色填充图像。然而,如果我这样做,颜色将覆盖图像。所以,我想给我的颜色增加透明度。然而,当我尝试这样做时,我遇到了标题中提到的错误消息。这是我的密码:

 /**
 * 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);
    }
}
/**
*这个程序将拍摄一张照片,并在上面放置一个特殊效果,使其颜色与彩虹的颜色相似。
* 
*@作者迪伦·哈布斯
*@version 08/03/16
*/
导入java.awt.*;
彩虹班
{
彩虹()
{
}
公共空间雨波效应(图片BJ)
{
int redValue=0;int greenValue=0;int blueValue=0;
像素彩虹targetPixel=新像素(pictureObj,0,0);
颜色彩虹像素颜色=空;
颜色[]彩虹调色板={新颜色(255,0,0,5),新颜色(255,200,0,5),颜色(255,255,0,5),颜色(0,255,0,5),颜色(0,0,255,5),新颜色(138,43,226,5),新颜色(75,0,130,5)};
对于(int y=0;y如果(y>=0&&y=51&&y=101&&y=151&&y=201&&y=251&&yJava无法确定要调用哪个构造函数。由于alpha的值为0.5,您可能希望该构造函数使用四个
float
s:

new Color(1F, 0, 0, .5F)
请注意使用
1
代替
255
,因为此构造函数获取范围为0..1的值

构造函数取四个
int
s是另一种可能性,在这种情况下,您需要为alpha参数传递
128

new Color(255, 0, 0, 128)

显示颜色的多个构造函数。 一个可能适合你的:

颜色(整数r、整数g、整数b、整数a)


您可以输入128(整数),而不是0.5(double)。

透明度称为alpha值。当所有其他RGB值都是浮点值时,它可以是浮点值;当所有RGB值都是int时,它可以是int。 看看这里,注意awt.Color构造器,并选择最适合您需要的构造器:
很少有构造器:

  • 公共颜色(int r、int g、int b)
  • 公共颜色(int r、int g、int b、int a)
  • 公共颜色(int rgb)
  • public Color(int-rgba,boolean-hasalpha)
  • 公共颜色(浮标r、浮标g、浮标b)
  • 公共颜色(浮点数r、浮点数g、浮点数b、浮点数a)
  • public Color(颜色空间cspace,浮点组件[],浮点alpha)
你可以用

公共颜色(int r、int g、int b、int a)
(创建一种sRGB颜色,其指定的红色、绿色、蓝色和alpha值在(0-255)范围内。)


公共颜色(float r、float g、float b、float a)
(创建一种sRGB颜色,指定的红色、绿色、蓝色和alpha值在(0.0-1.0)范围内。渲染中使用的实际颜色取决于在特定输出设备可用的颜色空间中找到最佳匹配。)

阅读API for Color--不要猜测提示:阅读您正在使用的类的javadoc:…其中包含该类的所有构造函数的列表。仅假设某个构造函数存在…并不能实现您的愿望。我以前读过它,这就是我如何发现透明浮点数的原因(这让我想到):颜色(float r、float g、float b、float a)创建一个sRGB颜色,指定的红、绿、蓝和alpha值在(0.0-1.0)范围内@DylanHubbs:没错,所有字段都是浮点数--将整数转换为浮点数.5实际上是整数吗?不,.5是双精度。这就是导致错误的原因。它应该与128交换,128是整数。对,你刚才在回答中遗漏了:)很抱歉,这是一个单独的问题…当我添加这个时,我的颜色仍然是不透明的,它们仍然覆盖着我的图像…你知道为什么会发生这种情况吗?@DylanHubbs你可能会发现这很有用:这也很有意义。我将使用另一个构造函数,并将128作为alpha。谢谢你的帮助!很抱歉,这是一个单独的问题注意…当我添加这个时,我的颜色仍然不是透明的,它们仍然覆盖着我的图像…你知道为什么会发生这种情况吗?@DylanHubbs因为你正在图像中设置像素,替换以前的像素。如果你将图像放在其他东西上,则“彩虹像素”你设置的图像看起来是半透明的,但是原始图像中的像素消失了。