.NET ব্যবহার করে হেক্সাডেসিমাল কালার কোড থেকে রঙটি কীভাবে পাব?


592

আমি কীভাবে একটি হেক্সাডেসিমাল রঙের কোড থেকে রঙ পেতে পারি (উদাঃ #FFDFD991 ) ?

আমি একটি ফাইল পড়ছি এবং একটি হেক্সাডেসিমাল রঙের কোড পাচ্ছি। আমাকে System.Windows.Media.Colorহেক্সাডেসিমাল কালার কোডের জন্য সংশ্লিষ্ট উদাহরণ তৈরি করতে হবে । এটি করার জন্য ফ্রেমওয়ার্কটিতে একটি ইনবিল্ট পদ্ধতি আছে?


3
হ্যাশ কোড দ্বারা সম্ভবত তারা # 00ff00 মানে?
মার্ক বাইয়ার্স

12
Viky - পড়ুন না যে হ্যাশ কোড হিসাবে। এটা বিভ্রান্তিকর. ;-) এটি কোনও রঙের হেক্সাডেসিমাল উপস্থাপনা।
উইম হলব্রান্ডসে

10
#FF0000একটি HTML (বা হেক্সাডেসিমাল) রঙ কোড, কোনও হ্যাশ কোড নয়। পার্থক্য শিখুন।
স্ল্যাक्स

10
# প্রতীকটিকে অনেক দেশে হ্যাশ বলা হয়, তাই বিভ্রান্তি।
জিওফএম

4
@ অ্যাক্সমান ??? সি # তে গেটহ্যাশকোড () কী করে তা আপনি ভুল বুঝে থাকতে পারেন। গেটহ্যাশকোড () হিট .NET এর প্রতিটি বস্তুর একটি পদ্ধতি । এটি রঙিন শ্রেণীর থেকে কোনও হেক্সাডেসিমাল মান দেয় না।
জন

উত্তর:


735

আমি ধরে নিচ্ছি যে এটি একটি এআরজিবি কোড ... আপনি কি উল্লেখ করছেন System.Drawing.Colorবা System.Windows.Media.Color? দ্বিতীয়টি উদাহরণস্বরূপ ডাব্লুপিএফ-তে ব্যবহৃত হয়। আমি এখনও কাউকে এটি উল্লেখ করতে দেখিনি, তাই আপনি যদি এটি সন্ধান করেন তবে:

using System.Windows.Media;

Color color = (Color)ColorConverter.ConvertFromString("#FFDFD991");

@ থোররিন কীভাবে আলফা মান পেতে যায় সে সম্পর্কে কোনও সহায়তা কারণ ওয়েব ডিজাইনের জন্য এই মানটি সিএসএস আরজিবার সাথে সামঞ্জস্য রাখতে আমাকে রূপান্তর করতে হবে।
সিদ্ধার্থ পান্ডে

2
@ ইয়োদা প্রথম দুটি অঙ্ক (এফএফ) হ'ল আলফা মান। Color.FromArgbযদিও এই ক্ষেত্রে পদ্ধতিটি ব্যবহার করা সম্ভবত এটি সহজ । আপনি যদি ভাসমান পয়েন্ট আলফা ব্যবহার করেন তবে আপনাকে 255 দিয়ে গুণ করতে হবে
থোররিন

2
আপনি যদি আরজিবি মানগুলি>> রঙ.ফর্মআর্গ (255,192,0) পেয়ে থাকেন
ইমান

50
স্ট্রিং হেক্স = "#FFFFFF"; রঙ _ রঙ = সিস্টেম.ড্রেইং.কালার ট্রান্সলেটর.ফ্রমএইচটিএমএল (হেক্স);
হর্ষাল দোশি জৈন

1
এর পরিবর্তে রঙ কেন ব্যবহার করবেন না?
নিমিটজ ই

549

ধরে নিচ্ছেন আপনার এইচটিএমএল টাইপ আরজিবি কোডগুলি বোঝানো হচ্ছে (হেক্স কোডগুলি বলা হয়, যেমন # এফএফসিসি 66), রঙিন ট্রান্সলেটর শ্রেণিটি ব্যবহার করুন :

System.Drawing.Color col = System.Drawing.ColorTranslator.FromHtml("#FFCC66");

তবে, আপনি যদি একটি এআরজিবি হেক্স কোড ব্যবহার করছেন তবে আপনি সিস্টেম থেকে উইন্ডোজ.মিডিয়া নেমস্পেস থেকে কালার কনভার্টার ক্লাস ব্যবহার করতে পারেন :

Color col = ColorConverter.ConvertFromString("#FFDFD991") as Color;
//or      = (Color) ColorConverter.ConvertFromString("#FFCC66") ;

115

আপনি যদি রঙ ট্রান্সলেটর ব্যবহার করতে না চান তবে আপনি এটি সহজেই করতে পারেন:

string colorcode = "#FFFFFF00";
int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
Color clr = Color.FromArgb(argb);

রঙিন কোডটি এআরজিবি মানটির কেবলমাত্র হেক্সাডেসিমাল উপস্থাপনা।

সম্পাদনা

আপনার যদি একটি একক পূর্ণসংখ্যার পরিবর্তে 4 টি মান ব্যবহার করতে হয় তবে আপনি এটি ব্যবহার করতে পারেন (বেশ কয়েকটি মন্তব্যের সংমিশ্রণ):

string colorcode = "#FFFFFF00";    
colorcode = colorcode.TrimStart('#');

Color col; // from System.Drawing or System.Windows.Media
if (colorcode.Length == 6)
    col = Color.FromArgb(255, // hardcoded opaque
                int.Parse(colorcode.Substring(0,2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(2,2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(4,2), NumberStyles.HexNumber));
else // assuming length of 8
    col = Color.FromArgb(
                int.Parse(colorcode.Substring(0, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(2, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(4, 2), NumberStyles.HexNumber),
                int.Parse(colorcode.Substring(6, 2), NumberStyles.HexNumber));

দ্রষ্টব্য 1 : নম্বরের স্টাইলগুলি সিস্টেম.গ্লোবালাইজেশনে রয়েছে।
দ্রষ্টব্য 2 : দয়া করে আপনার নিজের ত্রুটি পরীক্ষা করে সরবরাহ করুন (কালারকোডটি 6 বা 8 টির মধ্যে একটির হেক্সাডেসিমাল মান হওয়া উচিত)


3
Color.FromArgb এর জন্য একটি, r, g এবং b পরামিতি প্রয়োজন, একটি পূর্ণসংখ্যা নয়।
নাগরিক

7
আপনি যদি কমপ্যাক্ট ফ্রেমওয়ার্কটি ব্যবহার করেন যা রঙিন ট্রান্সলেটর উপলভ্য নয়
টেকিজিপো

7
@ ব্যবহারকারী 1763532 - আর, জি এবং বি এর জন্য colorcode = colorcode.Replace("#", "")সহজভাবে ব্যবহার করুন int a = byte.parse(colorcode.Substring(0,2), NumberStyles.HexNumber);এবং এর পরে । সাবস্ট্রিংয়ের প্রথম পরামিতি - সূচী - আর এর জন্য 2, জি এর জন্য 4 এবং খ এর 6 দিয়ে প্রতিস্থাপন করতে ভুলবেন না।
এম মিম্পেন

3
@ হ্যানসকেস্টিং, FromArgb1 প্যারামিটার নিয়ে System.Drawing.Colorএবং 4 টি প্যারামিটারে নেয়System.Windows.Media.Color
টরভিন

2
নোট করুন এটি 4 বাইটের জন্য কাজ করে (উদা। #FFFFFFFF) এইচটিএমএল রঙ (ইন আলফা)। যদি আপনি একটি 3 বাইট (#FFFFFF) দিয়ে চেষ্টা করেন তবে আলফা 0 হবে এবং আপনার রঙ স্বচ্ছ হবে। রঙের কোডটি 8/9 বর্ণের চেয়ে কম হলে আপনি আলিফাকে সন্নিবেশ করতে পারেন। কমপ্যাক্ট ফ্রেমওয়ার্কের জন্য দুর্দান্ত।
এপিসি

40

এই ঝরঝরে সামান্য এক্সটেনশন পদ্ধতিটিও রয়েছে:

static class ExtensionMethods
{
    public static Color ToColor(this uint argb)
    {
        return Color.FromArgb((byte)((argb & -16777216)>> 0x18),      
                              (byte)((argb & 0xff0000)>> 0x10),   
                              (byte)((argb & 0xff00) >> 8),
                              (byte)(argb & 0xff));
    }
}

ব্যাবহৃত হচ্ছে:

Color color = 0xFFDFD991.ToColor();

6
হতে পারে একটি বোকা প্রশ্ন, এবং একটু দেরি, তবে আপনি কেন আলফা মানটির জন্য -16777216 ব্যবহার করবেন?
গিপপিক

3
অবিচ্ছিন্নভাবে হেক্স ব্যবহার করে ছোট পরিবর্তন: ফিরুন রঙ। 0x08), (বাইট) (আরগিব ও 0 এক্সএফ));
খুব

1
এই কোডটি ত্রুটিযুক্ত। কেন কিছুই প্রদর্শিত হচ্ছে না তা আমি বুঝতে পারছিলাম না এবং এটি পরিণত হয়েছিল কারণ এই কোডটি হেক্সকে Colorসঠিকভাবে রূপান্তর করে না । আমি @ টু থেকে কোডটি ব্যবহার করেছি এবং এটি এটি ঠিক করেছে।
ub3rst4r

এখানে এর উত্তরটির পূর্ববর্তী সংস্করণটি এখানে রয়েছে: http://stackoverflow.com/a/784852/2721611
মোজতাবা রেজাeিয়ান

1
আপনি & 0xFFপ্রতিটি সময় চূড়ান্ত ডাউনশিল্ড মানটির &সাথে এটির পরিবর্তে those সমস্ত বিভিন্ন মানের পরিবর্তে এটি করতে পারেন।
নাইয়ারগডস

38

নীচের তিনটি রূপগুলি একই রঙ দেয়। শেষেরটি ভিজ্যুয়াল স্টুডিও 2010 আইডিইতে হাইলাইট হওয়ার সুবিধা রয়েছে (সম্ভবত এটি রিশার্পার যা এটি করছে) সঠিক রঙ সহ।

var cc1 = System.Drawing.ColorTranslator.FromHtml("#479DEE");

var cc2 = System.Drawing.Color.FromArgb(0x479DEE);

var cc3 = System.Drawing.Color.FromArgb(0x47, 0x9D, 0xEE);

7
এই রিটার্নের কিছুই নেই System.Windows.Media.Color
সিনাতর

14
    private Color FromHex(string hex)
    {
        if (hex.StartsWith("#"))
            hex = hex.Substring(1);

        if (hex.Length != 6) throw new Exception("Color not valid");

        return Color.FromArgb(
            int.Parse(hex.Substring(0, 2), System.Globalization.NumberStyles.HexNumber),
            int.Parse(hex.Substring(2, 2), System.Globalization.NumberStyles.HexNumber),
            int.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber));
    }

2
ইউডাব্লুপি রঙে। ফর্মআর্গ () এর জন্য 4 বাইট আর্গুমেন্ট প্রয়োজন requires সুতরাং এটির মতো দেখাবে: রঙ ফিরে। গ্লোবালাইজেশন.নম্বারস্টাইলস.হেক্স নাম্বার), বাইট.পার্স (হেক্স.সুবস্ট্রিং (4, 2), সিস্টেম.গ্লোবালাইজেশন.নম্বার স্টাইলস.হেক্স নাম্বার);
কিবারনেটিক

13

আমার এইচএক্স রঙের কোডটি একটি সিস্টেমে রূপান্তরিত করা দরকার ra

using System.Windows.Media;

-

System.Drawing.Color myColor = System.Drawing.ColorTranslator.FromHtml("#EFF3F7");
this.Background = new SolidColorBrush(System.Windows.Media.Color.FromArgb(myColor.A, myColor.R, myColor.G, myColor.B));

11

আপনি নিম্নলিখিত কোড ব্যবহার করতে পারেন:

Color color = System.Drawing.ColorTranslator.FromHtml("#FFDFD991");

5

আপনি যদি উইন্ডোজ স্টোর অ্যাপ্লিকেশন দিয়ে তা করতে চান তবে @ হ্যান্স কেষ্টিং এবং @ জিন্ক উত্তর অনুসরণ করে:

    string colorcode = "#FFEEDDCC";
    int argb = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
    tData.DefaultData = Color.FromArgb((byte)((argb & -16777216) >> 0x18),
                          (byte)((argb & 0xff0000) >> 0x10),
                          (byte)((argb & 0xff00) >> 8),
                          (byte)(argb & 0xff));

3

এই পোস্টটি হেক্স রঙের কোড থেকে একটি সিস্টেম বর্ণে রূপান্তর করতে চাইছেন এমন সবার জন্য গোটো হয়ে উঠেছে। অতএব, আমি ভেবেছিলাম যে আমি একটি বিস্তৃত সমাধান যুক্ত করব যা 6 ডিজিট (আরজিবি) এবং 8 ডিজিট (এআরজিবি) হেক্সের মান উভয়কেই নিয়ে থাকে।

ডিফল্টরূপে, মাইক্রোসফ্ট অনুসারে, যখন কোনও আরজিবি থেকে আরজিবিতে রূপান্তরিত হয়

আলফা মান 2515 (সম্পূর্ণরূপে অস্বচ্ছ) is

এর অর্থ digit সংখ্যার (আরজিবি) হেক্স রঙের কোডে এফএফ যুক্ত করে এটি একটি 8 সংখ্যার এআরজিবি হেক্স রঙ কোড হয়ে যায়। অতএব, একটি সহজ পদ্ধতি তৈরি করা যেতে পারে যা এআরজিবি এবং আরজিবি হেক্স উভয়কেই পরিচালনা করে এবং উপযুক্ত রঙের কাঠামোতে রূপান্তর করে।

    public static System.Drawing.Color GetColorFromHexValue(string hex)
    {
        string cleanHex = hex.Replace("0x", "").TrimStart('#');

        if (cleanHex.Length == 6)
        {
            //Affix fully opaque alpha hex value of FF (225)
            cleanHex = "FF" + cleanHex;
        }

        int argb;

        if (Int32.TryParse(cleanHex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out argb))
        {
            return System.Drawing.Color.FromArgb(argb);
        }

        //If method hasn't returned a color yet, then there's a problem
        throw new ArgumentException("Invalid Hex value. Hex must be either an ARGB (8 digits) or RGB (6 digits)");

    }

এটি হান্স কেষ্টিংয়ের উত্তরে অনুপ্রাণিত হয়েছিল।



0

WPF:

using System.Windows.Media;

//hex to color
Color color = (Color)ColorConverter.ConvertFromString("#7AFF7A7A");

//color to hex
string hexcolor = color.ToString();

প্রকৃতপক্ষে, কোনও হেক্স নেই তবেColor [Indigo]
জর্জ ল্যানেট

0

ব্যবহার

System.Drawing.Color.FromArgb(myHashCode);

2
হেক্স স্ট্রিং থেকে রূপান্তর সম্পর্কে নজর int?
থোররিন

মূলত প্রশ্নটি জিজ্ঞাসা করা হয়েছিল "কিভাবে একটি হ্যাশ কোড থেকে রঙ পাবেন" যা এখানে প্রচুর বিভ্রান্তি তৈরি করেছিল। ;-)
হার্জমিস্টার

0

যদি আপনি হ্যাশকোডটিকে এখানে হিসাবে বোঝায় তবে .GetHashCode()আমি ভয় করি যে আপনি ফিরে যেতে পারবেন না। হ্যাশ ফাংশন দ্বি-দিকনির্দেশক নয়, আপনি কেবল 'এগিয়ে' যেতে পারেন, ফিরেও পারবেন না।

রঙের হেক্সাডেসিমাল মানের উপর ভিত্তি করে যদি রঙটি পেতে হয় তবে ওডেদের পরামর্শ অনুসরণ করুন।


@ উইম প্রশ্নটি পরিষ্কার করতে ওপিকে সাহায্য করার জন্য ধন্যবাদ। আমি বলব যে এই উত্তরটির আর দরকার নেই, এবং এটি মোছার প্রস্তাব দিন।
jpaugh 15

0

আমি আমার প্রকল্পে রঙিন ডায়ালগ ব্যবহার করেছি। কালারডায়ালগ একসাথে "লাল", "ফুশিয়া" এবং কখনও কখনও "fff000" ফেরত দেয়। আমি এই সমস্যার সমাধান করেছি এমন কাউকে সাহায্য করতে পারে।

        SolidBrush guideLineColor;
        if (inputColor.Any(c => char.IsDigit(c)))
        {
            string colorcode = inputColor;
            int argbInputColor = Int32.Parse(colorcode.Replace("#", ""), NumberStyles.HexNumber);
             guideLineColor = new SolidBrush(Color.FromArgb(argbInputColor));

        }
        else
        {
            Color col = Color.FromName(inputColor);
             guideLineColor = new SolidBrush(col);
        }

ইনপুটকালার হ'ল রঙিন ডায়ালগ থেকে ফেরত মান।

এই প্রশ্নের উত্তরের জন্য সবাইকে ধন্যবাদ। এটি আমার পক্ষে বড় সহযোগিতা।

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