Java 如何将rgba从数组转换为十六进制?
[快照]我将检索七天中某一天的背景色并转换为十六进制。白天的时间在午夜自动选择,并以紫色突出显示。我将从七天列表中选择突出显示的小时数。我运行了一个数组,在七天中的一天得到了这个结果——“rgb(92,50,150)无重复滚动0%0%/自动填充框边框框” 但我的转换没有运行并抛出此错误- 无枚举常量org.openqa.selenium.support.Colors.RGBA(0,0,0,0)无重复滚动0%0%/自动填充框边框框 星期日: 关闭Java 如何将rgba从数组转换为十六进制?,java,selenium-webdriver,Java,Selenium Webdriver,[快照]我将检索七天中某一天的背景色并转换为十六进制。白天的时间在午夜自动选择,并以紫色突出显示。我将从七天列表中选择突出显示的小时数。我运行了一个数组,在七天中的一天得到了这个结果——“rgb(92,50,150)无重复滚动0%0%/自动填充框边框框” 但我的转换没有运行并抛出此错误- 无枚举常量org.openqa.selenium.support.Colors.RGBA(0,0,0,0)无重复滚动0%0%/自动填充框边框框 星期日: 关闭 星期一: 下午12:00 - 晚上八点 星期
星期一: 下午12:00 - 晚上八点
星期二: 下午1:00 - 下午六点
星期三: 上午10:00 - 下午六点
星期四: 下午12:00 - 晚上八点
星期五: 上午10:00 - 下午六点
星期六: 上午10:00 - 下午五点
@测试(优先级=3,description=“验证日期和时间”) public void today()抛出InterruptedException{ WebElement sunday=driver.findElement(By.xpath(“/[@id='hours']]/div/div/div/div”); 字符串sundayHrs=sunday.getCssValue(“背景”); String selectSunday=Color.fromString(sundayHrs.asHex(); WebElement monday=driver.findElement(By.xpath(“/[@id='hours']]/div/div/div/div/div[2]”); 字符串mondayHrs=monday.getCssValue(“背景”); String selectMonday=Color.fromString(mondayHrs.asHex(); WebElement tuday=driver.findElement(By.xpath(“/[@id='hours']]/div/div/div/div/div[3]”); 字符串tuesdayHrs=tuday.getCssValue(“背景”); String selectTuesday=Color.fromString(tuesdayHrs.asHex(); WebElement周三=driver.findElement(By.xpath(“/[@id='hours']]/div/div/div/div[4]”); 字符串wednesdayHrs=周三.getCssValue(“背景”); String select星期三=Color.fromString(星期三).asHex(); WebElement星期四=driver.findElement(By.xpath(“/[@id='hours']]/div/div/div/div[5]”); 字符串thursdayHrs=thurday.getCssValue(“背景”); String selectThresday=Color.fromString(thursdayHrs.asHex(); WebElement friday=driver.findElement(By.xpath(“/[@id='hours']]/div/div/div/div/div[6]”); 字符串fridayHrs=friday.getCssValue(“背景”); String selectFriday=Color.fromString(fridayHrs.asHex()
有很多方法可以实现这一点:
第一个解决方案:
String hex = String.format("#%02x%02x%02x%02x", a, r, g, b);
public int toHex(Color color) {
String alpha = addPadding(Integer.toHexString(color.getAlpha()));
String red = addPadding(Integer.toHexString(color.getRed()));
String green = addPadding(Integer.toHexString(color.getGreen()));
String blue = addPadding(Integer.toHexString(color.getBlue()));
String hex = "0x" + alpha + red + green + blue;
return Integer.parseInt(hex, 16);
}
private static final String addPadding(String s) {
return (s.length() == 1) ? "0" + s : s;
}
第二种解决方案:
String hex = String.format("#%02x%02x%02x%02x", a, r, g, b);
public int toHex(Color color) {
String alpha = addPadding(Integer.toHexString(color.getAlpha()));
String red = addPadding(Integer.toHexString(color.getRed()));
String green = addPadding(Integer.toHexString(color.getGreen()));
String blue = addPadding(Integer.toHexString(color.getBlue()));
String hex = "0x" + alpha + red + green + blue;
return Integer.parseInt(hex, 16);
}
private static final String addPadding(String s) {
return (s.length() == 1) ? "0" + s : s;
}
第一个解决方案返回十六进制字符串,第二个解决方案返回整数表示的十六进制。使用一些位运算符快速完成。这也可以用于有效地打包32位颜色
String rgba2hex(int red, int green, int blue, int alpha) {
return String.format("0x%08X", rgba(red, green, blue, alpha));
}
int rgba(int red, int green, int blue, int alpha) {
int rgba = 0;
rgba |= (alpha & 0xff) << 24;
rgba |= (red & 0xff) << 16;
rgba |= (green & 0xff) << 8;
rgba |= (blue & 0xff);
return rgba;
}
// reverse it
int[] rgba(int rgba) {
int[] color = new int[4];
color[4] = (rgba >> 24) & 0xff; // alpha
color[1] = (rgba >> 16) & 0xff; // red
color[2] = (rgba >> 8) & 0xff; // green
color[3] = rgba & 0xff; // blue
return color;
}
字符串rgba2hex(整数红色、整数绿色、整数蓝色、整数alpha){
返回String.format(“0x%08X”,rgba(红色、绿色、蓝色、alpha));
}
整数rgba(整数红色、整数绿色、整数蓝色、整数alpha){
int-rgba=0;
rgba |=(alpha&0xff)>16)&0xff;//红色
颜色[2]=(rgba>>8)&0xff;//绿色
颜色[3]=rgba&0xff;//蓝色
返回颜色;
}
使用java.awt.Color
类,您可以获取rgb值
String color2hex(Color color) {
return String.format("#%08X", color.getRGB());
}
您正在尝试将rgba转换为十六进制,对吗?是的,我想转换,但从七天开始,我将选择一个rowI发布的解决方案,如果这不是您想要的,请尝试编辑您的问题,以便我能够理解您正在尝试做的更多工作。通过一些代码示例,例如:希望如此,提出问题的用户不仅会重新研究h回答他们自己的问题,但也分享研究、代码尝试和结果。这表明你花了时间尝试帮助自己,这避免了我们重复显而易见的答案,最重要的是,它帮助你获得更具体和相关的答案!另请参阅:发布相关HTML。我怀疑你甚至需要转换RGB在所有…只要寻找正确的类,等等,你可以在一个定位器。