반응형
RGB 색상 값을 16 진수 문자열로 변환
내 Java 애플리케이션에서 빨강, 녹색 및 파랑 측면에서 Color
a 를 얻을 수있었습니다 JButton
. 이 값을 3 int
초 에 저장했습니다 .
RGB 값을 String
해당하는 16 진수 값을 포함하는 값으로 어떻게 변환 합니까?
예는 "#0033fA"
당신이 사용할 수있는
String hex = String.format("#%02x%02x%02x", r, g, b);
결과 16 진수를 대문자로 표시하려면 대문자 X를 사용하십시오 ( #FFFFFF
vs. #ffffff
).
하나의 라이너이지만 String.format이 없습니다.
Color your_color = Color.BLACK;
String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);
.toUpperCase()
대문자로 전환하려면 a를 추가 할 수 있습니다 .
ARRG가 옳습니다-투명하지 않은 색상에만 사용됩니다.
if(your_color.getAlpha() >= 16){
String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);
}
else{...}
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;
이것은 Vulcan 의 업데이트가 적용된 Vivien Barousse 가 제공 한 답변의 수정 된 버전입니다 . 이 예에서는 슬라이더를 사용하여 3 개의 슬라이더에서 RGB 값을 동적으로 검색하고 해당 색상을 직사각형에 표시합니다. 그런 다음 toHex () 메서드에서 값을 사용하여 색상을 만들고 각 16 진수 색상 코드를 표시합니다.
이 예제에는 GridBagLayout에 대한 적절한 제약 조건이 포함되어 있지 않습니다. 코드는 작동하지만 디스플레이가 이상하게 보입니다.
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;
}
}
Vivien과 Vulcan 모두에게 큰 감사를드립니다. 이 솔루션은 완벽하게 작동하며 구현이 매우 간단했습니다.
참고 URL : https://stackoverflow.com/questions/3607858/convert-a-rgb-color-value-to-a-hexadecimal-string
반응형
'developer tip' 카테고리의 다른 글
콘솔에서 메이븐의 확실한 쇼 스택 트레이스 만들기 (0) | 2020.10.20 |
---|---|
한 단계에서 구분 기호로 문자열 목록 요소 결합 (0) | 2020.10.20 |
종속성 속성의 변경 사항 수신 (0) | 2020.10.20 |
How to assign padding to Listview item divider line (0) | 2020.10.20 |
내 포트를 사용하는 애플리케이션을 어떻게 찾습니까? (0) | 2020.10.19 |