আমি কীভাবে জাভায় হেক্স রঙকে আরজিবি কোডে রূপান্তর করতে পারি? বেশিরভাগ গুগলে, আরজিবি থেকে হেক্সে কীভাবে রূপান্তর করা যায় সে সম্পর্কে নমুনাগুলি রয়েছে।
আমি কীভাবে জাভায় হেক্স রঙকে আরজিবি কোডে রূপান্তর করতে পারি? বেশিরভাগ গুগলে, আরজিবি থেকে হেক্সে কীভাবে রূপান্তর করা যায় সে সম্পর্কে নমুনাগুলি রয়েছে।
উত্তর:
আমার ধারণা এটি করা উচিত:
/**
*
* @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");
এখানে একটি সংস্করণ যা আরজিবি এবং আরজিবিএ সংস্করণ উভয়ই পরিচালনা করে:
/**
* 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;
}
একটি হেক্স রঙের কোডটি # আরআরজিবিবিবি
আরআর, জিজি, বিবি 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;
}
আপনি নীচের মত সহজভাবে এটি করতে পারেন:
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, 256, 4096 বা 65536 দ্বারা এটি দ্বিগুণ করুন (যথাক্রমে 3, 6, 9 বা 12)।
প্রদত্ত @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();
}
আপনি যদি এডব্লিউটি কালার.ডেকোড ব্যবহার করতে না চান তবে কেবল পদ্ধতির বিষয়বস্তু অনুলিপি করুন:
int i = Integer.decode("#FFFFFF");
int[] rgb = new int[]{(i >> 16) & 0xFF, (i >> 8) & 0xFF, i & 0xFF};
আপনার স্ট্রিংটি কীভাবে ফর্ম্যাট করা যায় তার উপর নির্ভর করে Integer.decode # বা 0x পরিচালনা করে
আরজিবিএ সংস্করণগুলি পরিচালনা করে এমন আরও একটি দ্রুত সংস্করণ এখানে রয়েছে :
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;
}
অ্যান্ড্রয়েড কোটলিন ব্যবহারকারীদের জন্য:
"#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
}
হেক্সিডিসিমাল রঙের কোডগুলি ইতিমধ্যে আরজিবি are ফর্ম্যাটটি #RRGGBB
অন্য দিন আমি একই সমস্যাটি সমাধান করছিলাম এবং হেক্স রঙের স্ট্রিংটিকে ইনট অ্যারেতে রূপান্তর করতে সুবিধাজনক বলে মনে করেছি [আলফা, আর, জি, বি]:
/**
* 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;
}
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);