Java를 사용하여 16 진수를 RGB로 변환하는 방법은 무엇입니까?
Java에서 16 진수 색상을 RGB 코드로 어떻게 변환 할 수 있습니까? 대부분 Google에서 샘플은 RGB에서 16 진수로 변환하는 방법에 대한 것입니다.
나는 이것이 그것을해야한다고 생각한다.
/**
*
* @param colorStr e.g. "#FFFFFF"
* @return
*/
public static Color hex2Rgb(String colorStr) {
return new Color(
Integer.valueOf( colorStr.substring( 1, 3 ), 16 ),
Integer.valueOf( colorStr.substring( 3, 5 ), 16 ),
Integer.valueOf( colorStr.substring( 5, 7 ), 16 ) );
}
실제로이 작업을 수행하는 더 쉬운 (내장) 방법이 있습니다.
Color.decode("#FFCCEE");
public static void main(String[] args) {
int hex = 0x123456;
int r = (hex & 0xFF0000) >> 16;
int g = (hex & 0xFF00) >> 8;
int b = (hex & 0xFF);
}
들어 안드로이드 개발, 내가 사용 :
int color = Color.parseColor("#123456");
다음은 RGB 및 RGBA 버전을 모두 처리하는 버전입니다.
/**
* Converts a hex string to a color. If it can't be converted null is returned.
* @param hex (i.e. #CCCCCCFF or CCCCCC)
* @return Color
*/
public static Color HexToColor(String hex)
{
hex = hex.replace("#", "");
switch (hex.length()) {
case 6:
return new Color(
Integer.valueOf(hex.substring(0, 2), 16),
Integer.valueOf(hex.substring(2, 4), 16),
Integer.valueOf(hex.substring(4, 6), 16));
case 8:
return new Color(
Integer.valueOf(hex.substring(0, 2), 16),
Integer.valueOf(hex.substring(2, 4), 16),
Integer.valueOf(hex.substring(4, 6), 16),
Integer.valueOf(hex.substring(6, 8), 16));
}
return null;
}
16 진수 색상 코드는 #RRGGBB입니다.
RR, GG, BB는 0-255 범위의 16 진수 값입니다.
X와 Y가 16 진수 문자 0-9A-F, A = 10, F = 15 인 RR XY를 호출하겠습니다.
10 진수 값은 X * 16 + Y입니다.
RR = B7이면 B의 10 진수는 11이므로 값은 11 * 16 + 7 = 183입니다.
public int[] getRGB(String rgb){
int[] ret = new int[3];
for(int i=0; i<3; i++){
ret[i] = hexToInt(rgb.charAt(i*2), rgb.charAt(i*2+1));
}
return ret;
}
public int hexToInt(char a, char b){
int x = a < 65 ? a-48 : a-55;
int y = b < 65 ? b-48 : b-55;
return x*16+y;
}
다음과 같이 간단하게 할 수 있습니다.
public static int[] getRGB(final String rgb)
{
final int[] ret = new int[3];
for (int i = 0; i < 3; i++)
{
ret[i] = Integer.parseInt(rgb.substring(i * 2, i * 2 + 2), 16);
}
return ret;
}
예를 들어
getRGB("444444") = 68,68,68
getRGB("FFFFFF") = 255,255,255
정수로 변환 한 다음 원래 16 진 문자열 (각각 3, 6, 9 또는 12)의 길이에 따라 16, 256, 4096 또는 65536으로 두 번 divmod를 만듭니다.
대한 자바 FX
import javafx.scene.paint.Color;
.
Color whiteColor = Color.valueOf("#ffffff");
To elaborate on the answer @xhh provided, you can append the red, green, and blue to format your string as "rgb(0,0,0)" before returning it.
/**
*
* @param colorStr e.g. "#FFFFFF"
* @return String - formatted "rgb(0,0,0)"
*/
public static String hex2Rgb(String colorStr) {
Color c = new Color(
Integer.valueOf(hexString.substring(1, 3), 16),
Integer.valueOf(hexString.substring(3, 5), 16),
Integer.valueOf(hexString.substring(5, 7), 16));
StringBuffer sb = new StringBuffer();
sb.append("rgb(");
sb.append(c.getRed());
sb.append(",");
sb.append(c.getGreen());
sb.append(",");
sb.append(c.getBlue());
sb.append(")");
return sb.toString();
}
Lots of these solutions work, but this is an alternative.
String hex="#00FF00"; // green
long thisCol=Long.decode(hex)+4278190080L;
int useColour=(int)thisCol;
If you don't add 4278190080 (#FF000000) the colour has an Alpha of 0 and won't show.
Here is another faster version that handles RGBA versions:
public static int hexToIntColor(String hex){
int Alpha = Integer.valueOf(hex.substring(0, 2), 16);
int Red = Integer.valueOf(hex.substring(2, 4), 16);
int Green = Integer.valueOf(hex.substring(4, 6), 16);
int Blue = Integer.valueOf(hex.substring(6, 8), 16);
Alpha = (Alpha << 24) & 0xFF000000;
Red = (Red << 16) & 0x00FF0000;
Green = (Green << 8) & 0x0000FF00;
Blue = Blue & 0x000000FF;
return Alpha | Red | Green | Blue;
}
Hexidecimal color codes are already rgb. The format is #RRGGBB
The other day I'd been solving the similar issue and found convenient to convert hex color string to int array [alpha, r, g, b]:
/**
* Hex color string to int[] array converter
*
* @param hexARGB should be color hex string: #AARRGGBB or #RRGGBB
* @return int[] array: [alpha, r, g, b]
* @throws IllegalArgumentException
*/
public static int[] hexStringToARGB(String hexARGB) throws IllegalArgumentException {
if (!hexARGB.startsWith("#") || !(hexARGB.length() == 7 || hexARGB.length() == 9)) {
throw new IllegalArgumentException("Hex color string is incorrect!");
}
int[] intARGB = new int[4];
if (hexARGB.length() == 9) {
intARGB[0] = Integer.valueOf(hexARGB.substring(1, 3), 16); // alpha
intARGB[1] = Integer.valueOf(hexARGB.substring(3, 5), 16); // red
intARGB[2] = Integer.valueOf(hexARGB.substring(5, 7), 16); // green
intARGB[3] = Integer.valueOf(hexARGB.substring(7), 16); // blue
} else hexStringToARGB("#FF" + hexARGB.substring(1));
return intARGB;
}
If you don't want to use the AWT Color.decode, then just copy the contents of the method:
int i = Integer.decode("#FFFFFF");
int[] rgb = new int[]{(i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF};
Integer.decode handles the # or 0x, depending on how your string is formatted
For shortened hex code like #fff or #000
int red = colorString.charAt(1) == '0' ? 0 : 255;
int blue = colorString.charAt(2) == '0' ? 0 : 255;
int green = colorString.charAt(3) == '0' ? 0 : 255;
Color.rgb(red, green,blue);
참고URL : https://stackoverflow.com/questions/4129666/how-to-convert-hex-to-rgb-using-java
'developer tip' 카테고리의 다른 글
EditText의 setHintTextColor () (0) | 2020.09.10 |
---|---|
Java에서 날짜가 두 날짜 사이에 있는지 어떻게 확인할 수 있습니까? (0) | 2020.09.10 |
그룹화 된 Pandas DataFrame에 함수를 병렬로 효율적으로 적용 (0) | 2020.09.10 |
지구가 아닌 달력 구현 (0) | 2020.09.10 |
jquery-mobile 및 knockoutjs를 사용하여 웹앱을 아키텍처하는 방법 (0) | 2020.09.10 |