web-dev-qa-db-ja.com

Javaを使用してhexをrgbに変換する方法は?

Javaで16進数の色をRGBコードに変換するにはどうすればよいですか?ほとんどのGoogleでは、RGBから16進数への変換方法に関するサンプルがあります。

88
user236501

私はこれがそれを行うべきだと思います:

/**
 * 
 * @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 ) );
}
151
xhh

実際には、これを行う簡単な(組み込みの)方法があります。

Color.decode("#FFCCEE");
229
Ben Hoskins
public static void main(String[] args) {
    int hex = 0x123456;
    int r = (hex & 0xFF0000) >> 16;
    int g = (hex & 0xFF00) >> 8;
    int b = (hex & 0xFF);
}
37
Andrew Beck

Android開発では、次を使用します。

int color = Color.parseColor("#123456");
23
Todd Davies

以下は、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;
}
6
Ian Newland

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;
}
4
MattRS

以下のように簡単に実行できます。

 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
3
Naveen

元の16進文字列の長さ(それぞれ3、6、9、または12)に応じて、整数に変換し、16、256、4096、または65536で2回divmodします。

JavaFXの場合

import javafx.scene.Paint.Color;

Color whiteColor = Color.valueOf("#ffffff");
1
Sayka

これらのソリューションの多くは機能しますが、これは代替手段です。

String hex="#00FF00"; // green
long thisCol=Long.decode(hex)+4278190080L;
int useColour=(int)thisCol;

4278190080(#FF000000)を追加しないと、色のアルファが0になり、表示されません。

0
Rich S

提供される@xhhの回答を詳しく説明するには、赤、緑、青を追加して、文字列を「rgb(0,0,0)」としてフォーマットしてから返すことができます。

/**
* 
* @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();
}
0
dragunfli

#fffまたは#000のような短縮された16進コードの場合

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);
0
GTID

RGBAバージョンを処理する別のfasterバージョンを次に示します。

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;
}
0
ucMedia