जावा का उपयोग करके हेक्स को आरजीबी में कैसे बदलें?


96

मैं जावा में हेक्स रंग को RGB कोड में कैसे बदल सकता हूं? ज्यादातर Google में, नमूने आरजीबी से हेक्स में बदलने के तरीके पर हैं।


क्या आप इस बात का उदाहरण दे सकते हैं कि आप किस चीज़ को बदलने की कोशिश कर रहे हैं और आप किस चीज़ को बदलने की कोशिश कर रहे हैं? यह स्पष्ट नहीं है कि आप क्या करने की कोशिश कर रहे हैं।
1

000000 काले रंग के आरजीबी में परिवर्तित हो जाएगा
user236501

जवाबों:


161

मुझे लगता है कि यह करना चाहिए:

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

उन लोगों के लिए जो 3 वर्ण संस्करण भी चाहते हैं, ध्यान दें कि 3 वर्ण मामले में प्रत्येक मान 255 * / 16 होना चाहिए। मैंने "000", "आआ" और "fff" के साथ यह परीक्षण किया, और वे सभी अब ठीक से काम करते हैं ।
एंड्रयू

283

वास्तव में, ऐसा करने का एक आसान (अंतर्निहित) तरीका है:

Color.decode("#FFCCEE");

3
दुर्भाग्य से यह AWT: /
wuppi

6
@wuppi मैंने सोचा था कि वास्तव में अच्छी खबर थी, क्योंकि AWT JDK में है। इसके बारे में इतना दुर्भाग्यपूर्ण क्या है?
दिमित्री एवोन्टोमोव

19
स्वीकृत समाधान AWT का भी उपयोग करता है। AWT मूल प्रश्न पूछने वाले के लिए कोई समस्या नहीं है। यह स्वीकृत समाधान होना चाहिए।
jewbix.cube 21

6
Android पर: Color.parseColor ()
Dawid Drozd


26

के लिए एंड्रॉयड विकास, मैं का उपयोग करें:

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

बस '#' को '0x' से बदलें
जूलियन ओएस

1
Color.parseColor इस तरह से तीन अंकों के साथ रंगों का समर्थन नहीं करता है:
#fff

यू नीचे #fff int लाल = colorString.charAt (1) == '0' की कोशिश कर सकता है? 0: 255; int नीला = colorString.charAt (2) == '0'? 0: 255; int green = colorString.charAt (3) == '0'? 0: 255; रंग। आरजीबी (लाल, हरा, नीला);
जीटीआईडी

9

यहाँ एक संस्करण है जो 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;
}

यह मेरे लिए उपयोगी था क्योंकि Integer.toHexString अल्फा चैनल का समर्थन करता है, लेकिन Integer.decode या Color.decode इसके साथ काम नहीं करता है।
टेड

4

एक हेक्स रंग कोड #RRGGBB है

आरआर, जीजी, बीबी 0-255 से लेकर हेक्स मान हैं

आरआर एक्सवाई को कॉल करें जहां एक्स और वाई हेक्स चरित्र 0-9 ए-एफ, ए = 10, एफ = 15 हैं

दशमलव मान X * 16 + Y है

यदि आरआर = बी 7, बी के लिए दशमलव 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

आप इसे नीचे के रूप में कर सकते हैं:

 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

2

के लिए JavaFX

import javafx.scene.paint.Color;

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


1

इन समाधानों के बहुत सारे काम करते हैं, लेकिन यह एक विकल्प है।

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

यदि आप 4278190080 (# FF000000) नहीं जोड़ते हैं, तो रंग में 0 का अल्फा है और यह नहीं दिखाएगा।


0

प्रदान किए गए उत्तर @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

यदि आप AWT Color.decode का उपयोग नहीं करना चाहते हैं, तो बस विधि की सामग्री की प्रतिलिपि बनाएँ:

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

Integer.decode # स्ट्रिंग को स्वरूपित करने के तरीके के आधार पर, # या 0x को संभालता है


0

यहाँ एक और तेज़ संस्करण है जो RGBA संस्करण को संभालता है:

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

सबसे आसान तरीका:

// 0000FF
public static Color hex2Rgb(String colorStr) {
    return new Color(Integer.valueOf(colorStr, 16));
}


-1

दूसरे दिन मैं इसी तरह के मुद्दे को हल कर रहा था और हेक्स रंग स्ट्रिंग को इंट सरणी में बदलने के लिए सुविधाजनक पाया गया [अल्फा, आर, जी, बी]:

 /**
 * 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;
}

-1
For shortened hex code like #fff or #000

int red = "colorString".charAt(1) == '0' ? 0 : 
     "colorString".charAt(1) == 'f' ? 255 : 228;  
int green =
     "colorString".charAt(2) == '0' ? 0 :  "colorString".charAt(2) == 'f' ?
     255 : 228;  
int blue = "colorString".charAt(3) == '0' ? 0 : 
     "colorString".charAt(3) == 'f' ? 255 : 228;

Color.rgb(red, green,blue);

#eee के बारे में क्या?
बोनी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.