首页 文章

如何使用Java将hex转换为rgb?

提问于
浏览
73

如何在Java中将十六进制颜色转换为RGB代码?主要是在谷歌,样本是如何从RGB转换为十六进制 .

15 回答

  • 3

    我想这应该这样做:

    /**
     * 
     * @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 ) );
    }
    
  • -1

    实际上,有一种更容易(内置)的方式:

    Color.decode("#FFCCEE");
    
  • 0
    public static void main(String[] args) {
        int hex = 0x123456;
        int r = (hex & 0xFF0000) >> 16;
        int g = (hex & 0xFF00) >> 8;
        int b = (hex & 0xFF);
    }
    
  • -1

    对于 Android 开发,我使用:

    int color = Color.parseColor("#123456");
    
  • 1

    这是一个处理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;
    }
    
  • 5

    十六进制颜色代码是#RRGGBB

    RR,GG,BB是十六进制值,范围从0到255

    我们称之为RR XY,其中X和Y是十六进制字符0-9A-F,A = 10,F = 15

    十进制值为X * 16 Y.

    如果RR = B7,则B的小数为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;
    }
    
  • 144

    你可以这样做,如下:

    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
    
  • 0

    将其转换为整数,然后根据原始十六进制字符串的长度(分别为3,6,9或12)将其两次调整为16,256,4096或65536 .

  • 201

    要详细说明@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();
    }
    
  • 4

    很多这些解决方案都有效,但这是一种替代方案 .

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

    如果您不添加4278190080(#FF000000),则颜色的Alpha为0且不会显示 .

  • 35

    这是另一个处理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;
    }
    
  • 22

    对于 JavaFX

    import javafx.scene.paint.Color;
    

    .

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

    十六进制颜色代码已经是rgb . 格式为#RRGGBB

  • 0

    前几天我一直在解决类似的问题,发现将十六进制颜色字符串转换为int数组[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;
    }
    
  • 0

    如果您不想使用AWT Color.decode,那么只需复制方法的内容:

    int i = Integer.decode("#FFFFFF");
    int[] rgb = new int[]{(i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF};
    

    Integer.decode处理#或0x,具体取决于字符串的格式

相关问题