জাভা ব্যবহার করে কীভাবে হেক্সকে আরজিবিতে রূপান্তর করবেন?


97

আমি কীভাবে জাভায় হেক্স রঙকে আরজিবি কোডে রূপান্তর করতে পারি? বেশিরভাগ গুগলে, আরজিবি থেকে হেক্সে কীভাবে রূপান্তর করা যায় সে সম্পর্কে নমুনাগুলি রয়েছে।


আপনি যা থেকে রূপান্তর করতে চাইছেন এবং যা রূপান্তর করার চেষ্টা করছেন তার উদাহরণ দিতে পারেন? আপনি ঠিক কী করার চেষ্টা করছেন তা এটি পরিষ্কার নয়।
kkress

000000 কালো রঙ
আরজিবিতে

উত্তর:


163

আমার ধারণা এটি করা উচিত:

/**
 * 
 * @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 চরিত্রের সংস্করণ তাদের জন্যও নোট করুন যে 3 টি চরিত্রের ক্ষেত্রে প্রতিটি মান অবশ্যই 255/16 হওয়া উচিত I ।
অ্যান্ড্রু

287

আসলে, এটি করার একটি সহজ উপায় (অন্তর্নির্মিত) রয়েছে:

Color.decode("#FFCCEE");

4
দুর্ভাগ্যক্রমে এটি
ডাব্লুটিটি

6
@ ওপ্পি আমি ভেবেছিলাম যে এটি আসলে একটি ভাল খবর, যেমনটি ডাব্লুটিটি জেডিকে রয়েছে। এটার এত দুর্ভাগ্য কী?
দিমিত্রি অ্যাভটনোমভ 21

19
গৃহীত সমাধানটি এডাব্লুটিও ব্যবহার করে। মূল প্রশ্ন জিজ্ঞাসাকারীর জন্য এডাব্লুটি কোনও সমস্যা নয়। এটি গ্রহণযোগ্য সমাধান হওয়া উচিত।
jewbix.cube

6
অ্যান্ড্রয়েডে: কালার.পর্স কালার ()
দাউদ


27

জন্য অ্যান্ড্রয়েড উন্নয়ন, আমি ব্যবহার করুন:

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

'0x' দিয়ে কেবল '#' প্রতিস্থাপন করুন
জুলিয়ান ওস

4
Color.parseColor এই জাতীয় তিনটি সংখ্যার সাথে রঙগুলি সমর্থন করে না:
# fff

আপনি # ff এর নীচে লাল = colorString.charAt (1) == '0' এর চেষ্টা করতে পারেন? 0: 255; ইন্ট ব্লু = colorString.charAt (2) == '0'? 0: 255; int সবুজ = colorString.charAt (3) == '0'? 0: 255; রঙ.আরজিবি (লাল, সবুজ, নীল);
জিটিআইডি

10

এখানে একটি সংস্করণ যা আরজিবি এবং আরজিবিএ সংস্করণ উভয়ই পরিচালনা করে:

/**
 * 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.decode বা color.decode এর সাথে কাজ করছে বলে মনে হয় না।
টেড

4

একটি হেক্স রঙের কোডটি # আরআরজিবিবিবি

আরআর, জিজি, বিবি 0-255 থেকে শুরু করে হেক্স মান

আসুন আরআর এক্সওয়াইকে কল করুন যেখানে এক্স এবং ওয়াই হেক্স অক্ষর 0-9A-F, A = 10, F = 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


1

এটিকে একটি পূর্ণসংখ্যায় রূপান্তর করুন, তারপরে মূল হেক্স স্ট্রিংয়ের দৈর্ঘ্যের উপর ভিত্তি করে 16, 256, 4096 বা 65536 দ্বারা এটি দ্বিগুণ করুন (যথাক্রমে 3, 6, 9 বা 12)।


1

এই সমাধানগুলির অনেকগুলি কাজ করে তবে এটি একটি বিকল্প।

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

আপনি যদি 4278190080 (# FF000000) না যোগ করেন তবে রঙটির একটি আলফা থাকে এবং এটি প্রদর্শিত হবে না।


0

প্রদত্ত @xhh উত্তরটি বিস্তারিতভাবে বর্ণনা করার জন্য, আপনি আপনার স্ট্রিংটি ফেরত দেওয়ার আগে "আরজিবি (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

আপনি যদি এডব্লিউটি কালার.ডেকোড ব্যবহার করতে না চান তবে কেবল পদ্ধতির বিষয়বস্তু অনুলিপি করুন:

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

আপনার স্ট্রিংটি কীভাবে ফর্ম্যাট করা যায় তার উপর নির্ভর করে Integer.decode # বা 0x পরিচালনা করে


0

আরজিবিএ সংস্করণগুলি পরিচালনা করে এমন আরও একটি দ্রুত সংস্করণ এখানে রয়েছে :

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

অ্যান্ড্রয়েড কোটলিন ব্যবহারকারীদের জন্য:

"#FFF".longARGB()?.let{ Color.parceColor(it) }
"#FFFF".longARGB()?.let{ Color.parceColor(it) }
fun String?.longARGB(): String? {
    if (this == null || !startsWith("#")) return null
    
//    #RRGGBB or #AARRGGBB
    if (length == 7 || length == 9) return this

//    #RGB or #ARGB
    if (length in 4..5) {
        val rgb = "#${this[1]}${this[1]}${this[2]}${this[2]}${this[3]}${this[3]}"
        if (length == 5) {
            return "$rgb${this[4]}${this[4]}"
        }
        return rgb
    }

    return null
}

-1

হেক্সিডিসিমাল রঙের কোডগুলি ইতিমধ্যে আরজিবি are ফর্ম্যাটটি #RRGGBB


4
যদি না এটি # আরজিবি, # আরআরআরজিজিবিবিবি, বা # আরআরআরআরজিজিজিবিবিবিবি হয় না।
Ignacio Vazquez-Abram

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

# আই সম্পর্কে কি?
বনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.