রূপান্তর করুন সিস্টেম.ড্রেইং.আরজিবি এবং হেক্স মানে রঙ


125

সি # ব্যবহার করে আমি নিম্নলিখিত দুটিটি বিকাশের চেষ্টা করছিলাম। আমি যেভাবে এটি করছি তাতে কিছু সমস্যা হতে পারে এবং আপনার সদয় পরামর্শের প্রয়োজন। তদতিরিক্ত, এটি করার কোনও বিদ্যমান পদ্ধতি আছে কিনা তা আমি জানি না।

private static String HexConverter(System.Drawing.Color c)
{
    String rtn = String.Empty;
    try
    {
        rtn = "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
    }
    catch (Exception ex)
    {
        //doing nothing
    }

    return rtn;
}

private static String RGBConverter(System.Drawing.Color c)
{
    String rtn = String.Empty;
    try
    {
        rtn = "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
    }
    catch (Exception ex)
    {
        //doing nothing
    }

    return rtn;
}

ধন্যবাদ।


উত্তর:


202

আমি এখানে সমস্যাটি দেখতে ব্যর্থ হয়েছি। কোডটি আমার কাছে ভাল দেখাচ্ছে।

আমি শুধু মনে করতে পারেন যে চেষ্টা / ধরা ব্লক অপ্রয়োজনীয় রয়েছে - রঙ একটি struct এবং আর, জি, এবং বি বাইট, তাই গ নাল হতে পারে না এবং c.R.ToString(), c.G.ToString()এবং c.B.ToString()আসলে ব্যর্থ করতে পারবেন না ( আমি কেবল তাদের সাথে ব্যর্থ দেখতে পাচ্ছি এটি হ'ল NullReferenceExceptionএবং এগুলির কোনওটিই আসলে নালু হতে পারে না)।

আপনি নিম্নলিখিতটি ব্যবহার করে পুরো জিনিসটি পরিষ্কার করতে পারেন:

private static String HexConverter(System.Drawing.Color c)
{
    return "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
}

private static String RGBConverter(System.Drawing.Color c)
{
    return "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
}

1
আমি এতদূর গিয়েছিলাম যে খালি ট্রাই-ক্যাচ ব্লকগুলি (প্রায়) সর্বজনীনভাবে নির্মূল করা উচিত। এই কোডটি সংশোধিত করার পরে এখনই যদি রাস্তা নিচে না যায় তবে তাদের বাগী কোডে নিয়ে যাওয়ার বড় সম্ভাবনা রয়েছে। তবুও, ক্লিন আপ কোডের জন্য +1 এবং একটি ভাল ফ্রেমযুক্ত প্রশ্নের জন্য ওপি +1 এ।
জেএমডি

7
ভিবি সমমানের সন্ধানের জন্য আমাকে কিছুটা সময় নিয়েছে: স্ট্রিং.ফর্ম্যাট ("# {0: এক্স 2} {1: এক্স 2} {2: এক্স 2}", সিআর, সিজি, সিবি)
জাচারিডল

1
আমি বিকল্প কোড হিসাবে আপনার কোডটি সি # 6 তে অভিযোজিত পোস্ট করব। আপনি এটি এখানে দেখতে পারেন ।
এওলসডিজ কোডিড্যাকট২৪.কম-এ চলছে

রঙের একটি আলফা চ্যানেল (স্বচ্ছতা) থাকলে এটি ভুল রঙ তৈরি করবে। আপনি পূর্ণ স্বচ্ছতা পাবেন।
ল্যারিবুড

@ ল্যারিবুড একেবারে সত্য, এবং এটি নির্দেশ করার জন্য আপনাকে ধন্যবাদ। আমার উদাহরণটি কেবলমাত্র আলফা চ্যানেলটি এড়িয়ে গেছে কারণ আমি মূল প্রশ্নটি বন্ধ করে দিচ্ছিলাম, এতে এটি অন্তর্ভুক্তও হয়নি। :)
এরি রথ

189

আপনি এটি সহজ রাখতে এবং স্থানীয় রঙ অনুবাদক ব্যবহার করতে পারেন:

Color red = ColorTranslator.FromHtml("#FF0000");
string redHex = ColorTranslator.ToHtml(red);

তারপরে তিনটি রঙের জোড়াটি পূর্ণসংখ্যার আকারে ভাঙ্গুন:

int value = int.Parse(hexValue, System.Globalization.NumberStyles.HexNumber);

7
তবে আমি যদি এইভাবে করি তবে রঙ লাল = সিস্টেম.ড্রয়িং.ক্লোর.রেড; স্ট্রিং রেডহেক্স = কালারট্রান্সলেটর। টোএইচটিএমএল (লাল); এটি হেক্স মান প্রদান করে না।
নাজমুল

অবশ্যই করা উচিত, আমি সেই কোডটি বিশেষভাবে পরীক্ষা করেছিলাম এবং # "FF0000" পেয়েছি। কি পাচ্ছেন? আপনি এমএসডিএন রেফারেন্সটি উল্লেখ করতেও পছন্দ করতে পারেন: এমএসডিএন.মাইক্রোসফটকম / en
ট্রয় হান্ট

রঙিন রঙের সাথে চেষ্টা করুন = সিস্টেম.ড্রেইং.কালার.রেড; -> এটি # FF0000 সরবরাহ করে না।
নাজমুল

9
আপনার প্রদত্ত কোডটি কাজ করে তবে আমি যখন আপনার কোডের প্রথম লাইনটি এতে পরিবর্তন করি: রঙ লাল = সিস্টেম.ড্রেইং.ক্লোর.আরড; -> তারপরে এটি হেক্স কোড দেয় না। এটি আউটপুট হিসাবে "রেড" দেয়।
নাজমুল

4
@ হক - নিশ্চিত করেছেন কালার ট্রান্সলেটর রঙটিকে একটি "বন্ধুত্বপূর্ণ" নাম দেয়। কি বিরক্তিকর!
আনন

38

আপনি যদি সি # 6 বা ততোধিক উচ্চতর ব্যবহার করতে পারেন তবে আপনি ইন্টারপোলটেড স্ট্রিংগুলি থেকে উপকার পেতে পারেন এবং @ আরি রথের সমাধানটি এর মতো আবার লিখতে পারেন:

সি # 6:

public static class ColorConverterExtensions
{
    public static string ToHexString(this Color c) => $"#{c.R:X2}{c.G:X2}{c.B:X2}";

    public static string ToRgbString(this Color c) => $"RGB({c.R}, {c.G}, {c.B})";
}

এছাড়াও:

  • আমি thisএগুলিকে এক্সটেনশন পদ্ধতি হিসাবে ব্যবহার করতে কীওয়ার্ডটি যুক্ত করি ।
  • আমরা stringশ্রেণীর নামের পরিবর্তে টাইপ কীওয়ার্ডটি ব্যবহার করতে পারি ।
  • আমরা ল্যাম্বদা সিনট্যাক্স ব্যবহার করতে পারি।
  • আমি আমার স্বাদ আরও স্পষ্ট হতে তাদের নাম পরিবর্তন।

এত পরিষ্কার ... +1!
শকওভার


1

আমি একটি এক্সটেনশন পদ্ধতি পেয়েছি যা বেশ ভালভাবে কাজ করে

public static string ToHex(this Color color)
{
    return String.Format("#{0}{1}{2}{3}"
        , color.A.ToString("X").Length == 1 ? String.Format("0{0}", color.A.ToString("X")) : color.A.ToString("X")
        , color.R.ToString("X").Length == 1 ? String.Format("0{0}", color.R.ToString("X")) : color.R.ToString("X")
        , color.G.ToString("X").Length == 1 ? String.Format("0{0}", color.G.ToString("X")) : color.G.ToString("X")
        , color.B.ToString("X").Length == 1 ? String.Format("0{0}", color.B.ToString("X")) : color.B.ToString("X"));
}

রেফ: https://social.msdn.microsoft.com/ Forums/en-US/4c77ba6c-6659-4a46-920a-7261dd4a15d0/how-to-convert-rgba-value-into-its-equivalent-hex-code ? ফোরাম = winappswithcsharp


আমি বিশ্বাস করি এটি হেক্স 2 হওয়া উচিত, হেক্স নয়, অন্যথায় রঙটি হয়ত ভুল ইন্টারপোল্টেড।
মোহাম্মদ নুরাল্ডিন

@ মোহাম্মদউরল্ডিন ​​হেক্স 2 কোডে কোথায় যাবে, আমি মাঝে মাঝে রঙ কিছুটা আলাদা হতে দেখেছি?
ব্যবহারকারী 1

আমি এর X2পরিবর্তে বলতে চাইছি X, অন্যথায় আপনি এটির 1পরিবর্তে পেতে পারেন 01তবে এটি একটি সমস্যা হবে।
মোহাম্মদ নুরাল্ডিন

@ মোহাম্মদ নূরল্ডিন ​​হ্যাঁ, X2তারপরে আপনার সমস্ত color.B.ToString("X").Length == 1 ? আঞ্চলিকের দরকার নেই ।
অধ্যাপক

1

হেক্সাডেসিমাল কোডের জন্য এটি ব্যবহার করে দেখুন

  1. পান ARGB (আলফা, লাল, সবুজ, নীল) রঙের জন্য উপস্থাপনা
  2. আলফা চ্যানেল ফিল্টার আউট :& 0x00FFFFFF
  3. মানটি ফর্ম্যাট করুন (হেক্সের জন্য হেক্সাডেসিমাল "এক্স 6" হিসাবে)

আরজিবি একের জন্য

  1. শুধু আউট ফরম্যাট Red , Green, Blueমান

বাস্তবায়ন

private static string HexConverter(Color c) {
  return String.Format("#{0:X6}", c.ToArgb() & 0x00FFFFFF);
}

public static string RgbConverter(Color c) {
  return String.Format("RGB({0},{1},{2})", c.R, c.G, c.B);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.