2011-03-22 4 views
2

Java로 내 색상 편집기를 구현하려고했습니다. 간단한 소프트웨어 여야합니다. 사용자는 16 진수 RGB로 색상을 입력합니다 (예 : 0xFF00FF). 색조, 채도, 채도 및 밝기를 계산하는 방법을 알고 있지만이 색에 색조 값을 추가하거나 빼는 방법은 알고 있습니까? 이것은 수수께끼입니다.색상을 프로그래밍 방식으로 추가하는 방법은 무엇입니까?

사용할 알고리즘이나 수식이 있습니까?

이제이 방법을 사용합니다. 그러나 결과는 Adobe Photoshop에서 얻은 결과와 다릅니다.

public void addHue(float addHue) { 
    float c = getChroma(); 
    addHue %= 6; 
    if (addHue < 2) { 
     float n = 1 - green; 
     green = green + addHue * n; 
    } else if (addHue < 4) { 
     addHue -= 2; 
     float n = 1 - blue; 
     blue = blue + addHue * n; 
    } else if (addHue < 6) { 
     addHue -=4; 
     float n = 1 - red; 
     red = red + addHue * n; 
    } 
    if (green > 1) green = 1; 
    else if (green < 0) green = 0; 
    if (red > 1) red = 1; 
    else if (red < 0) red = 0; 
    if (blue > 1) blue = 1; 
    else if (blue < 0) blue = 0; 
} 
+0

왜 색조를 추가 할 수 있습니까? 무엇을 성취하려고합니까? 그게 사용자 정의 컨트롤인가요? –

답변

1

java.awt.Color 클래스가이를 지원할 수 있습니다.

+0

안녕 데이비드, 불행히도 나는 그것을 할 수 없습니다. 나는 이것을 J2ME 프로젝트에 구현하려고 시도했다. 하지만 관심을 가져 주셔서 감사합니다. –

1

두 가지 색조를 추가하여 달성하려는 것을 정말로 이해하지 못합니다.

색조는 사용자가 나타내는 색의 "색조"를 제공하는 각도입니다. 각도로 생각하면 색조는 [0, 360 [범위. 또한 45와 405 값은 동일한 색상을 나타냅니다.

색상을 조작하려는 경우이를 고려해야합니다. 즉, 예를 들어 355와 5와 같은 두 개의 값을 평균화하려고 할 때 올바른 결과는 0 (원을 그려 그 두 값 사이의 최소 반각을 취함) 또는 180 (최대 절반 각도)이 될 수 있습니다. (색상 조작 유틸리티가없는) 나는 안드로이드에 그것을 어떻게


는 색상 (RGB와 HSV)의 두 표현을 저장하는 내 자신의 색상 클래스를 만드는 것입니다.

그런 다음 RGB를 설정하거나 HSV를 설정할 수있는 방법이 있습니다. 동일한 색상 공간에 추가하는 것은 간단합니다. 그런 다음이 메소드가 호출 될 때마다 저는 새로운 값에서 색상 구성 요소를 계산하는 updateHSV 또는 updateRGB 메소드를 호출합니다. 색상 convertion 샘플 코드에 대한

class Color { 
    float[] hsv; 
    float[] rgb; 

    public void setRgb(float[] rgb) { 
    System.arraycopy(rgb, 0, this.rgb, 0, 3); 
    computeHsvFromRgb(); 
    } 

    public void setHsv(float[] hsv) { 
    System.arraycopy(hsv, 0, this.hsv, 0, 3); 
    computeRgbFromHsv(); 
    } 

    // ... 
} 

:

+0

MarvinLabs에게 감사드립니다. 내가 정말로 묻는 것은 "색상에 색조 값을 더하거나 빼는 법"입니다. 예를 들어 # FFFF00과 같이 색상이 노란색입니다. 색조를 예를 들어 내 색 (# FFFF00)에 추가하려면 어떻게합니까? 적색 부분, 녹색 부분 및 파란색 부분에 어떤 값을 더하거나 빼야합니까? –

+1

아이디어는 항상 두 색상의 표현을 항상 최신 상태로 유지하는 것입니다. 따라서 RGB를 설정 한 다음 HSV를 조작하고 마지막으로 RGB를 다시 가져올 수 있습니다. 편집 된 답변을 참조하십시오. –

+0

안녕하세요 마빈, 답장을 보내 주셔서 감사합니다. 나는 computeHsvFromRgb(); 및 computeRgbFromHsv(); 내가 필요한거야. 왜 그것을 공유하지 않습니까? 비밀 수식인가요? –

관련 문제