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


88

আমার জাভা অ্যাপ্লিকেশনটিতে, আমি লাল, সবুজ এবং নীল রঙের Colorহিসাবে একটি পেতে সক্ষম হয়েছি JButton; আমি এই মানগুলি তিনটি মধ্যে সংরক্ষণ করেছি int

আমি কীভাবে সেই আরজিবি মানগুলিকে Stringসমান হেক্সাডেসিমাল উপস্থাপনা সমেত রূপান্তর করব ? যেমন#0033fA

উত্তর:


210

তুমি ব্যবহার করতে পার

String hex = String.format("#%02x%02x%02x", r, g, b);  

আপনার ফলাফলের হেক্স-অঙ্কগুলি মূলধন করতে ( #FFFFFFবনাম #ffffff) চাইলে মূলধন এক্স ব্যবহার করুন ।


4
ইনপুট প্রকারের সাথে 'রঙ': স্ট্রিং. ফর্ম্যাট ("#% 06x", পূর্ণসংখ্যা.ভালিউওফ (color.getRGB () এবং 0x00FFFFF));
স্টাফেন মিলিয়েন

এর ফলাফলclass java.util.IllegalFormatConversionException with message: x != java.lang.Float
মিগ 82

@ স্মিলিয়ান 62: আমি বিশ্বাস করি যে এটিকে সরলীকৃত করা যেতে পারেString.format("#%06x", color.getRGB() & 0xFFFFFF);
MestreLion

@ মাস্টারলিয়ন, আপনার সিনট্যাক্সের সাথে আপনার একটি সতর্কতা রয়েছে কারণ আপনি "পূর্ণসংখ্যার" পরিবর্তে "ইনট" ব্যবহার করেন।
স্টাফেন মিলিয়েন

47

একটি আর লাইনার তবে String.formatসমস্ত আরজিবি রঙ ছাড়াই :

Color your_color = new Color(128,128,128);

String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);

আপনি .toUpperCase()যদি বড় বড় অক্ষরে স্যুইচ করতে চান তবে আপনি একটি যুক্ত করতে পারেন। দ্রষ্টব্য, যে সমস্ত আরজিবি রঙের জন্য এটি বৈধ (প্রশ্নে জিজ্ঞাসা করা হয়েছে)।

আপনার কাছে এআরজিবি রঙ থাকলে আপনি এটি ব্যবহার করতে পারেন:

Color your_color = new Color(128,128,128,128);

String buf = Integer.toHexString(your_color.getRGB());
String hex = "#"+buf.substring(buf.length()-6);

একটি লাইনার তাত্ত্বিকভাবেও সম্ভব, তবে দুবার হেক্স স্ট্রিংয়ে কল করতে হবে। আমি এআরজিবি সমাধানটিকে বেঞ্চমার্ক করেছি এবং এর সাথে তুলনা করেছি String.format():

এখানে চিত্র বর্ণনা লিখুন


11
আপনার রঙের একটি আলফা মান <16 থাকলে (যেমন এর হেক্সাডেসিমাল এআরজিবি উপস্থাপনা 0 দিয়ে শুরু হয়) এই পদ্ধতিটি নষ্ট হয়ে গেছে তা সচেতন হন Be
এআরজি

15
Random ra = new Random();
int r, g, b;
r=ra.nextInt(255);
g=ra.nextInt(255);
b=ra.nextInt(255);
Color color = new Color(r,g,b);
String hex = Integer.toHexString(color.getRGB() & 0xffffff);
if (hex.length() < 6) {
    hex = "0" + hex;
}
hex = "#" + hex;

4
এই উত্তরটি ক্ষেত্রে ব্যর্থ যে লাল বা সবুজ মান (একটি উদাহরণ হচ্ছে শূন্য Color.BLUE, যা আউটপুট #0ffকারণ & 'মধ্যে Color.BLUE ফলাফল আরজিবি মান ing 256বেস 10, যা মধ্যে ffহেক্স মধ্যে)। একটি ফিক্স হ'ল whileজিরো প্রিপ্রেন্ডিংয়ের সময় if স্টেটমেন্টের চেয়ে লুপ ব্যবহার করা ।
এফটিম্পসন

1

এই কর্তৃক প্রদত্ত উত্তর একজন অভিযোজিত সংস্করণ Vivien Barousse থেকে আপডেট সঙ্গে Vulcan প্রয়োগ করা হয়েছে। এই উদাহরণে আমি স্লাইডারগুলি তিনটি স্লাইডার থেকে আরজিবি মানগুলি গতিশীলভাবে পুনরুদ্ধার করতে এবং সেই রঙটি একটি আয়তক্ষেত্রের মধ্যে প্রদর্শন করতে ব্যবহার করি। তারপরে টুহেক্স () পদ্ধতিতে আমি একটি রঙ তৈরি করতে এবং সম্পর্কিত হেক্স রঙের কোডটি প্রদর্শন করতে মানগুলি ব্যবহার করি।

এই উদাহরণটিতে গ্রিডব্যাগলআউটটির জন্য উপযুক্ত বাধা অন্তর্ভুক্ত নয়। কোডটি কাজ করলেও প্রদর্শনটি অদ্ভুত লাগবে।

public class HexColor
{

  public static void main (String[] args)
  {
   JSlider sRed = new JSlider(0,255,1);
   JSlider sGreen = new JSlider(0,255,1);
   JSlider sBlue = new JSlider(0,255,1);
   JLabel hexCode = new JLabel();
   JPanel myPanel = new JPanel();
   GridBagLayout layout = new GridBagLayout();
   JFrame frame = new JFrame();

   //set frame to organize components using GridBagLayout 
   frame.setLayout(layout);

   //create gray filled rectangle 
   myPanel.paintComponent();
   myPanel.setBackground(Color.GRAY);

   //In practice this code is replicated and applied to sGreen and sBlue. 
   //For the sake of brevity I only show sRed in this post.
   sRed.addChangeListener(
         new ChangeListener()
         {
             @Override
             public void stateChanged(ChangeEvent e){
                 myPanel.setBackground(changeColor());
                 myPanel.repaint();
                 hexCode.setText(toHex());
         }
         }
     );
   //add each component to JFrame
   frame.add(myPanel);
   frame.add(sRed);
   frame.add(sGreen);
   frame.add(sBlue);
   frame.add(hexCode);
} //end of main

  //creates JPanel filled rectangle
  protected void paintComponent(Graphics g)
  {
      super.paintComponent(g);
      g.drawRect(360, 300, 10, 10);
      g.fillRect(360, 300, 10, 10);
  }

  //changes the display color in JPanel
  private Color changeColor()
  {
    int r = sRed.getValue();
    int b = sBlue.getValue();
    int g = sGreen.getValue();
    Color c;
    return  c = new Color(r,g,b);
  }

  //Displays hex representation of displayed color
  private String toHex()
  {
      Integer r = sRed.getValue();
      Integer g = sGreen.getValue();
      Integer b = sBlue.getValue();
      Color hC;
      hC = new Color(r,g,b);
      String hex = Integer.toHexString(hC.getRGB() & 0xffffff);
      while(hex.length() < 6){
          hex = "0" + hex;
      }
      hex = "Hex Code: #" + hex;
      return hex;
  }
}

ভিভিয়ন এবং ভলকান উভয়কেই একটি বিশাল ধন্যবাদ। এই সমাধানটি নিখুঁতভাবে কাজ করে এবং এটি প্রয়োগ করা অত্যন্ত সহজ।

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