অ্যান্ড্রয়েডের কোনও রঙের পূর্ণসংখ্যাকে হেক্স স্ট্রিংয়ে রূপান্তর করবেন কীভাবে?


194

আমার একটি পূর্ণসংখ্যা রয়েছে যা একটি থেকে উত্পন্ন হয়েছিল android.graphics.Color

পূর্ণসংখ্যার মান -16776961 হয়

আমি এই মানটিকে কীভাবে # আরআরজিবিবিবি আকারের সাথে একটি হেক্স স্ট্রিংয়ে রূপান্তর করব

সোজা কথায়: আমি -16776961 থেকে # 0000FF আউটপুট দিতে চাই

দ্রষ্টব্য: আমি আউটপুটটিতে একটি আলফা থাকতে চাই না এবং আমি কোনও সফলতা ছাড়াই এই উদাহরণটিও চেষ্টা করেছি


আপনি কী হেক্স রঙ সেট করতে চেষ্টা করছেন? আমি মনে করি এখানে অন্যরকম উত্তর আছে
ব্লুন্ডেল

@ ব্লুন্ডেল আমি বাহ্যিক অ্যাপ্লিকেশনটিতে রঙটি রফতানি করছি। রঙটি এই ফর্ম্যাটটিতে হওয়া দরকার #RRGGBB
বোসাহ চুদ

তাহলে ডেভেলপার.অ্যান্ড্রয়েড / রেফারেন্স / অ্যান্ড্রয়েড / কনটেন্ট / রেস / আই এর সাথে কী হয়েছে ? কালার (ইনট) পেতে আপনাকে url টি আটকাতে হবে বা স্ক্রোল করতে হবে
ব্লুন্ডেল

কাঁচা পূর্ণসংখ্যা পাচ্ছি। মানগুলি কোনও রিসোর্স
ওয়ে

উত্তর:


470

মুখোশটি নিশ্চিত করে যে আপনি কেবল আরআরজিবিবি পেয়েছেন এবং% 06X আপনাকে শূন্য প্যাডযুক্ত হেক্স দেয় (সর্বদা 6 টি অক্ষর দীর্ঘ):

String hexColor = String.format("#%06X", (0xFFFFFF & intColor));

3
এটি নিখুঁতভাবে কাজ করেছে, আপনাকে ধন্যবাদ! Integer.toHexString () এ সাবস্ট্রিং ব্যবহার করার চেষ্টা করার চেয়ে সহজ এবং আরও নির্ভুল।
টম

7
আমি ঠিক বুঝতে পেরেছি কালার.পার্সকলার (স্ট্রিং হেক্স) পদ্ধতি যা আমি যা চাইছিলাম ঠিক তা করে।
মার্সেল ব্রো

4
int colorInt = 0xff000000 | Integer.parseInt (হেক্সস্ট্রিং, 16);
জোশ

5
যদি আপনার রঙ আলফা ব্যবহার করে তবে এই উত্তরটি ব্যবহার করবেন না। আপনি এটি হারাতে হবে।
সাইমন

5
@ সিমন, এই আলফা-তৈরি করতে কেবল মাস্কটি সরিয়ে 6 থেকে 8 পরিবর্তন করুন Note নোট করুন যে ওপি আলফা খারিজ করার জন্য বলেছে।
TWiStErRob

54

7
এই উত্তরটি বর্ণের আলফা ধরে রেখেছে
বোসাহ চুদ

3
ঠিক আছে, আপনি যদি আলফা থেকে মুক্তি পেতে চান তবে এটির জন্য কিছুটা মুখোশ তৈরি করুন: পূর্ণসংখ্যা. টোহেক্সস্ট্রিং (মান এবং 0x00FFFFFF)
মিং_কোড

3
জাভা ইন্ট টাইপ 4 বাইট দীর্ঘ। অ্যান্ড্রয়েড.গ্রাফিক্স.ক্লোরের ডকুমেন্টেশন অনুসারে, লেফটেস্ট বাইট হ'ল আলফা চ্যানেল। 0x00FFFFFF মান সহ কিছুটা বুদ্ধিমান ও অপারেশন ব্যবহার করে আপনি প্রয়োজনীয়তম লেফটেস্ট বাইট (আলফা চ্যানেল) 0 থেকে সাফ করুন Inte সমস্ত অ-উল্লেখযোগ্য সংখ্যা কল থেকে বাদ দেওয়া হবে, তাই আপনি যদি নেতৃস্থানীয় শূন্যগুলি চান তবে আপনাকে নিজের মধ্যে এটি চাপতে হতে পারে।
মিং_কোড

1
জন্য কাজ করে না 0x000000FF, অথবা 0xFF0000FFযদি আপনি আলফা মুছে ফেলুন।
TWiStErRob

26

আমি বিশ্বাস করি যে আমি উত্তরটি পেয়েছি, এই কোডটি পূর্ণসংখ্যাকে একটি হেক্স স্ট্রিংয়ে রূপান্তর করে একটি আলফা মুছে ফেলে।

Integer intColor = -16895234;
String hexColor = "#" + Integer.toHexString(intColor).substring(2);

নোটটি কেবলমাত্র এই কোডটি ব্যবহার করুন যদি আপনি নিশ্চিত হন যে আলফা সরানোর ফলে কোনও কিছুই প্রভাবিত হবে না।


1
আপনি যদি এর 0x00FFFFFFমাধ্যমে পাঠান তবে এটি ক্রাশ হবে Color.parseColor
TWiStErRob

9

এখানে আমি কি করেছি

 int color=//your color
 Integer.toHexString(color).toUpperCase();//upercase with alpha
 Integer.toHexString(color).toUpperCase().substring(2);// uppercase without alpha

ধন্যবাদ ছেলেরা আপনি উত্তর দিয়েছেন জিনিসটি


প্রথম রূপটি 0x00FFFFFF-> "এফএফএফএফএফএফ" (কোনও আলফা নয়) এর জন্য কাজ করে না । দ্বিতীয় বৈকল্পটি 0x00000FFF-> "এফ" (বিট হারিয়েছে) এর জন্য কাজ করে না ।
TWiStErRob

@TWiStErRob আপনি কি এমন কোনও সমাধান দিয়েছেন যা আলফা চ্যানেলের সাথে রঙিনের জন্য নির্ভরযোগ্যভাবে কাজ করে?
সায়েত

2
@ সাকেট শীর্ষ উত্তরের বৈকল্পিকটি হওয়া উচিত:String.format("#%08X", intColor)
TWiStErRob

@TWiStErRob আহ, ঠিক উপরের উত্তরের নীচে আপনার মন্তব্য দেখেছেন। ধন্যবাদ!
সায়েত

5

হেক্সাডেসিমাল স্ট্রিং এ আরজিবি রঙের পূর্ণসংখ্যার মান:

String hex = Integer.toHexString(color); // example for green color FF00FF00

এআরজিবি রঙের পূর্ণসংখ্যার মান থেকে হেক্সাডেসিমাল স্ট্রিং:

int color = (Integer.parseInt( hex.substring( 0,2 ), 16) << 24) + Integer.parseInt( hex.substring( 2 ), 16);

4

এই পদ্ধতিতে ইন্টিজার.টোহেক্সস্ট্রিংয়ের সাথে , কালার. পার্সক্লোর ব্যবহার করার সময় কিছু রঙের জন্য আপনার অজানা রঙের ব্যতিক্রম থাকতে পারে।

এবং এই পদ্ধতির সাহায্যে স্ট্রিং.ফর্ম্যাট ("#% 06 এক্স", (0xFFFFFF এবং ইন্টকালার)) , আপনি আলফা মান হারাবেন।

সুতরাং আমি এই পদ্ধতিটি সুপারিশ করছি:

public static String ColorToHex(int color) {
        int alpha = android.graphics.Color.alpha(color);
        int blue = android.graphics.Color.blue(color);
        int green = android.graphics.Color.green(color);
        int red = android.graphics.Color.red(color);

        String alphaHex = To00Hex(alpha);
        String blueHex = To00Hex(blue);
        String greenHex = To00Hex(green);
        String redHex = To00Hex(red);

        // hexBinary value: aabbggrr
        StringBuilder str = new StringBuilder("#");
        str.append(alphaHex);
        str.append(blueHex);
        str.append(greenHex);
        str.append(redHex );

        return str.toString();
    }

    private static String To00Hex(int value) {
        String hex = "00".concat(Integer.toHexString(value));
        return hex.substring(hex.length()-2, hex.length());
    }

0
String int2string = Integer.toHexString(INTEGERColor); //to ARGB
String HtmlColor = "#"+ int2string.substring(int2string.length() - 6, int2string.length()); // a stupid way to append your color

0

আপনি যদি ব্যবহার করেন তবে Integer.toHexStringআপনি পছন্দ মতো রঙগুলিতে রূপান্তর করার সময় মিস মিস জিরোগুলি শেষ করবেন 0xFF000123। এখানে আমার কোটলিন ভিত্তিক সমাধান যা অ্যান্ড্রয়েড নির্দিষ্ট ক্লাস বা জাভা প্রয়োজন হয় না। সুতরাং আপনি এটি মাল্টিপ্লাটফর্ম প্রকল্পেও ব্যবহার করতে পারেন:

    fun Int.toRgbString(): String =
        "#${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    fun Int.toArgbString(): String =
        "#${alpha.toStringComponent()}${red.toStringComponent()}${green.toStringComponent()}${blue.toStringComponent()}".toUpperCase()

    private fun Int.toStringComponent(): String =
        this.toString(16).let { if (it.length == 1) "0${it}" else it }

    inline val Int.alpha: Int
        get() = (this shr 24) and 0xFF

    inline val Int.red: Int
        get() = (this shr 16) and 0xFF

    inline val Int.green: Int
        get() = (this shr 8) and 0xFF

    inline val Int.blue: Int
        get() = this and 0xFF
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.