티스토리 뷰

반응형

다음은 16진수 또는 10진수(RED, GREEN, BLUE)로 입력된 색상 값을 Decimal code로 변환하거나 혹은 반대로 변환하는 Java 메서드입니다.

public class ColorConverter {
    
    // 16진수 색상 값을 입력으로 받아 유효성을 검사한 다음 
    // Integer.parseInt(color, 16)을 사용하여 10진수 코드로 변환
    public static int convertColorToDecimal(String color) {
        if (color.startsWith("#")) { // #FFFFFF 로 입력된 경우 # 제거
            color = color.substring(1);
        }
        
        if (color.length() != 6) {
            throw new IllegalArgumentException("Invalid color format. Expected 6-digit hexadecimal value.");
        }
        
        return Integer.parseInt(color, 16);
    }
    
    // 개별 RGB 색상 구성 요소를 입력으로 사용하여 유효성을 검사하고 
    // 비트 시프트 연산과 비트 OR(|)을 사용하여 단일 십진수 코드로 결합
    public static int convertColorToDecimal(int red, int green, int blue) {
        int decimalRed = validateColorValue(red);
        int decimalGreen = validateColorValue(green);
        int decimalBlue = validateColorValue(blue);
        
        return (decimalRed << 16) | (decimalGreen << 8) | decimalBlue;
    }
    
    // 10진 색상 값을 입력으로 받아 Integer.toHexString(color)으로 16진 코드 변환
    // 모두 대문자 변환 후 문자열 반환
    public static String convertDecimalToHex(int color) {
        String hex = Integer.toHexString(color);
        // 필요한 경우 각 구성 요소를 0으로 채움
        while (hex.length() < 6) {
            hex = "0" + hex;
        }
        return hex.toUpperCase();
    }
    
    // 빨강, 녹색 및 파랑 구성 요소를 별도의 정수로 가져와 16진수 색상 표현으로 변환
    // 색상 값의 유효성을 검사하고 Integer.toHexString을 사용하여 16진수 문자열로 변환
    public static String convertRGBToHex(int red, int green, int blue) {
        int decimalRed = validateColorValue(red);
        int decimalGreen = validateColorValue(green);
        int decimalBlue = validateColorValue(blue);

        String hexRed = Integer.toHexString(decimalRed);
        String hexGreen = Integer.toHexString(decimalGreen);
        String hexBlue = Integer.toHexString(decimalBlue);

        // 필요한 경우 각 구성 요소를 0으로 채움
        hexRed = padWithZeros(hexRed);
        hexGreen = padWithZeros(hexGreen);
        hexBlue = padWithZeros(hexBlue);

        // 색상값 문자열결합
        return hexRed + hexGreen + hexBlue;
    }

    // 16진수 색상 문자열을 입력으로 사용하여 빨강, 녹색 및 파랑 구성 요소의 숫자 배열로 변환
    // "#" 기호(있는 경우)를 제거하고 입력 형식의 유효성을 검사하며 
    // Integer.parseInt를 사용하여 16진수 문자열을 10진수 값으로 구문 분석하여
    // 비트 단위 시프트 및 비트 단위 AND 연산을 사용하여 개별 RGB 구성 요소를 추출
    public static int[] convertHexToRGB(String hex) {
        if (hex.startsWith("#")) { // #FFFFFF 로 입력된 경우 # 제거
            hex = hex.substring(1);
        }

        if (hex.length() != 6) {
            throw new IllegalArgumentException("Invalid color format. Expected 6-digit hexadecimal value.");
        }

        int decimal = Integer.parseInt(hex, 16);
        int red = (decimal >> 16) & 0xFF;
        int green = (decimal >> 8) & 0xFF;
        int blue = decimal & 0xFF;

        return new int[]{red, green, blue};
    }

    private static int validateColorValue(int value) {
        if (value < 0 || value > 255) {
            throw new IllegalArgumentException("Invalid color value. Expected a number between 0 and 255.");
        }
        return value;
    }

    // 필요한 경우 각 구성 요소를 0으로 채움
    private static String padWithZeros(String hex) {
        if (hex.length() < 2) {
            hex = "0" + hex;
        }
        return hex;
    }
    
    public static void main(String[] args) {
        int a = convertColorToDecimal("2F329F");
        int b = convertColorToDecimal(42, 50, 159);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        
        int c = convertColorToDecimal("6C4A2D");
        int d = convertColorToDecimal(108, 74, 45);
        System.out.println("c = " + c);
        System.out.println("d = " + d);

        String rgb = convertRGBToHex(42, 50, 159);
        int[] decimal = convertHexToRGB("6C4A2D");

        System.out.println("rgb = " + rgb); // rgb = 2A329F
        System.out.println("decimal = [" + decimal[0] + ", " + decimal[1] + ", " + decimal[2] + "]");
 // decimal = [108, 74, 45]
    }
}

 

결과

반응형
반응형
최근에 달린 댓글