이번 진행중인 Project 에서 grid 의 Row 값에 따라 Blinking 을 해야만 했다.
한마디로 번쩍임을 말한다.

그런데 번쩍거릴때 Row 의 ForeColor 와 BackColor 가 보색관계를 가져야 한다는 요구사항이 나왔다.

많이 해맸다.
C코드도 변환해 보고...
그런데 그 코드가 잘못된건지...아니면 내가 잘못 변환을 한건지는 모르겠으나 
원하는 색깔이 나오지 않았다.

구글을 뒤졌지.. ㅋㅋ

보색의 정의에서부터...

간단히 

'보색(補色)'이란 혼합했을 때 무채색이 되는 두 색.
즉, '색상환'에서 반대편의 색.

색상환?


이런거다... 

초등학교때 배운건 


요거다 

다 기억들 나실 거다.


초등학교 교과과정에는 요로케 배운다는 군...


10 색 상환이란?
 
 
 

기본이 되는 10가지의 색 : 빨강,주황,노랑,연두,녹색,청록,파랑,남색,보라,자주

유사색 : 한색을 중심으로 이웃하는 색들

반대색 : 한색을 중심으로 반대쪽에 있는 색들

* 10색상환에서 서로 이웃하는 색끼리 알 맞게 섞으면 두 색의 중간색이 나옴.


(이거 분명히 시험에 날거다... ㅡㅡ' 나왔던거 같기도하고...)
색상환이란 뭐었이냐? 틀린답은?
10색상환에 들어가지 않는 색은?  4번 자주  ㅡㅡ'

우리의 위대하신 정책임님께서는 아직도 10색상환을 외우고 계신다. 10색상환 완전정복. ㅡㅡ'

(내일 내게 커다란 V 자를 내미실 정책임님 얼굴이 선하다.  (- ㅡ)V   요로케... ^^)


초등생들이 미술시간에 색상환에 대해 어떻게 배우는지 알고 싶다면 
http://www.topianet.co.kr/topia/3/3m/3m050101.htm 에 가보라... 더 자세히 알 수 있다.


그리고 이렇게 색에 관해서 알기쉽게? 정리 해 놓은 사이트도 있더라...

http://www.designview.co.kr/color3.htm






원색의 개념은 원색을 혼합해서 다른 모든 색상을 만들 수 있으며, 반대로 다른 색상을 혼합해서는 원색을 만들 수 없다는 뜻을 가지고 있다

색료의 3원색

색료의 3원색 청색(Cyan), 자주(Magenta), 노랑(Yellow)을 말하며, 이들 3원색을 여러가지 비율로 혼합하면, 모든 색상을 만들수 있다. 반대로 다른 색상을 혼합해서는 이 3원색을 만들 수 없다.
이들 3원색을 1차색이라고 부르며, 빨강과 노랑을 혼합해서 만든 주황과 노랑과 파랑을 혼합해서 만든 초록과, 파랑과 빨강을 혼합해서 만든 보라색은 2차색이라고 부
른다.
색채의 지각과정에서 살펴보았듯이 물체의 색채는 물체의 표면에서 반사된 빛이라는 것을 알수있다. 인쇄 잉크나 페인트와 같은 안료는 물체의 표면색을 만들기 위해 사용된다.

색광의 3원색

반사의 과정을 거치지 않은 빛의 색을 직접 보는 것은 텔레비젼 화면이나 모니터에서 색채를 보거나 혼합하는 경우이다. 화면에 빨강(R), 초록(G), 파랑(B)의 모든 색파장을 고르게 비치면 흰색으로 보인다. 빨강, 초록, 파랑의 색파장뿐만 아니라 주황, 보라, 노랑의 색파장도 다른 색파장을 조합해서 만들 수 없는 빛이기는 하지만, 시각기관에 있는 감각 수용기는 빨강, 초록, 파랑 파장에 가장 민감하게 반응한다. 그것은 이들의 조합으로 다른 색을 느끼게 되는 색파장이기 때문이며 이를 빛의 삼원색이라 한다.




색과 색을 혼합하여 다른 색을 만드는 것을 혼합색이라고 한다. 삼원색은 혼합에 의해 여러가지 색을 만들어 낼수 있다. 그림물감의 경우(색료의 3원색)와 빛의 경우(색광의 3원색)에서는 각각 그 색상이 다르다.
색료의 3원색과 색광의 3원색은물리적인 보색 관계로, 색상환에서는 서로 중간에 위치한다. 이러한 보색관계의 원리는 컬러텔레비젼이나 컴퓨터 그래픽, 무대조명과 같은 색광의 혼색, 그림물감이나 페인트의 혼색, 색팽이나 레코드 플레이어 등의 색회전에 의한 회전혼색, 직물의 날실과 씨실에 의한 혼색, 점묘화법의 혼색, 색유리같은 셀로판의 겹침에 의한 혼색, 컬러 인쇄와 망점에 의한 혼색 등에 잘 나타난다.

감법혼색(감산혼합)

색료의 혼합(그림물감, 인쇄잉크, 염료등) 으로 섞을 수록 명도가 낮아진다. 색을 겹치면 그만큼 빛의 양이 줄어 어두워진다. 다른말로 어떤 색에서 어떤 부분의 빛을 없애는 것이다.
우리가 어떤 물체의 색을 만들기 위해 안료를 혼합하는 과정을 감법혼색이라고 한다.그 이유는 안료를 혼합하면 할수록 반사되는 빛의 파장은 감소되기 때문이다.
흰색 안료는 빛이 지닌 모든 색파장을 반사하는 성질을 가지고 있다. 이 흰색에 파랑을 섞으면 연한 하늘색이 된다. 이경우 파랑은 모든 색파장을 흡수하고 파란색 파장만을 반사하려는 성질이 있기 때문에 흰색이 지녔던 반사향을 감소시킨다.

가법혼색(가산혼합)

가법혼색은 색광(빛)을 혼합함으로써 새로운 색채를 만들어 내는 것으로, 가법혼색의 3원색은 색광의 3원색이라고도 하며, R(빨강), G(녹색), B(파랑)라고 한다.
색광의 혼합으로 색광을 가할수록 혼합색이 점점 밝아진다
빛의 삼원색이 되는 색파장 중 초록빛과 빨강빛을 함께 비치면 노랑으로 보이며, 빨강빛과 파랑빛을 함께 비치면 마젠타라고 불리는 자색을 띤 분홍색으로, 파랑빛과 초록빛을 함께 비치면 사인안(Cyan)이라 불리는 하늘색으로 보인다.
즉, 빛의 2차색은 안료의 1차색이 된다. 이처럼 빛은 혼합할수록 더 많은 빛이 가해져서 눈을 자극하게 되며, 더 밝은 색으로 지각하게 되므로 이를 가법혼색이라고 부른다.
이러한 가법혼색은 빛을 혼합할수록 점점 밝고 선명한 색으로 만들 수는 있으나 어둡고 탁하게는 만들기가 어렵다. 따라서 무대에서 사용되는 조명은 삼원색의 빛만 가지고는 부족하므로 특수한 필터가 필요하다. 텔레비젼과 같은 화면에서 보여지는 색은 빛의 강도와 양을조절하여 혼합함으로써 다양한 색으로 느낄 수 있게 되는 것이다. 이러한 가법혼합은 컬러 인쇄를 할 경우에 색분해에 이용이 되며 스포트 라이트나 컬러 텔레비젼, 조명 등에 사용된다.

계시가법 혼색

색광을 빨리 교대하면서 계시적으로 혼색하는 방법으로 순차가법혼색이라고도 한다. 팽이나 레코드 플레이어, 바람개비 등의 회전원판을 일정한 면적비로 하여 부채모양으로 나누어 칠해 1초간에 30회 이상의 속도로 회전시키면, 사실은 이두 가지 색을 번갈아서 계시적으로 보고 있는 것이지만, 눈의 망막에서 혼색되어 하나의 새로운 색으로 보이게 된다. 이 혼색의 결과 색은 원래 색의 평균치보다 밝게 보인다.

병치가법 혼색

하나하나의 점으로는 볼 수 없는 작은 색점의 집합에 의해 혼색하는 방법으로, 멀리서 보면 혼색되어 다른색으로 보이는데, 점묘화법이나 모자이크 벽화 등은 이러한 효과를 이용한 것이다. 직물의 다른 색의 종, 횡실로 짠 직물의 색 등은 병치가법혼색의 대표적인 것이다. 또 옷감의 무늬에서 흔히 볼수 있는데, 두가지 색을 미세한 점이나 선으로 엇갈려 놓고 멀리 떨어져 보면 새로운 색으로 보이는 것도 이경우다. 혼색한 결과로거의 중간의 명도가되고, 보색관계에서는 회색이 된다.


일단은 요까이 하자.

그리고 결정적으로 알기쉽게 정리해 놓은 싸이트가 있었으니...

그이름도 유명한 아도브다...(혹자는 어도비라고 하드라...)

난 아도브가 좋드라...어도브 도 뭐 괜찮고... ㅋㅋ
양놈들은 뭐라하는지 모르겠다.. 우짜 똥꼬집. ㅡㅡ'

System을 씨스팀이라고 하는 사람도 있더만... ㅡㅡ


여튼 아래는 일러스트레이트에서 구현한 보색의 방식이다.

http://help.adobe.com/ko_KR/Illustrator/13.0/help.html?content=WS714a382cdf7d304e7e07d0100196cbc5f-6288.html

반전
색상의 각 구성 요소를 색상 비율 상 반대 값으로 바꿉니다. 예를 들어, RGB 색상의 R 값이 100일 때 [반전] 명령을 실행하면 R 값이 155(255 - 100 = 155)로 변경됩니다.



보색
선택된 색상에서 가장 큰 RGB 값과 가장 작은 RGB 값의 합계를 바탕으로 색상의 각 구성 요소를 새로운 값으로 바꿉니다. Illustrator에서는 현재 색상의 가장 큰 RGB 값과 가장 작은 RGB 값을 더한 다음 이 값에서 각 구성 요소의 해당 값을 빼서 새로운 RGB 값을 만듭니다. 예를 들어, R, G, B 값이 각각 102, 153, 51인 색상을 선택할 경우 Illustrator에서는 가장 큰 값(153)과 가장 작은 값(51)을 더해 새 값(204)을 구합니다. 새 값에서 기존 색상의 각 RGB 값을 빼서 새로운 RGB 보색 값을 만듭니다. 새 빨강 값은 204 - 102(현재의 빨강 값) = 102, 새 녹색 값은 204 - 153(현재의 녹색 값) = 51, 새 파랑 값은 204 - 51(현재의 파랑 값) = 153이 됩니다.



반전에 대한 정의도 따라왔다.
걍  긁어다 붙였다. ㅡㅡ


요 내용을 바탕으로 소스를 구현해 봤다.



    ''' <summary>
    ''' Color Dialog 에서 색상을 선택하면 보색과 반전색을 구하고
    ''' 선택한 색상은 Label 의 ForeColor로 
    ''' BackColor 는 구한 보색과 반전색상으로 각각의 Label 을 채운다.
    ''' 이 Procedure 의 내용을 보시면 Control 구성을 아실수 있을 거라 믿습니다.
    ''' 그리고 코드 끝부분에 실행모습을 캡쳐해놓았으니 금방 아실수 있을 겁니당... ^^
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>

    Private Sub lblOriginal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles lblOriginal.Click, lblReverseColor.Click

        Dim ColorDial As ColorDialog = New ColorDialog
        Dim colorComplementary, colorReverse As Color

        If ColorDial.ShowDialog = Windows.Forms.DialogResult.OK Then

            colorComplementary = ComplementaryColor(ColorDial.Color)
            colorReverse = ReverseColor(ColorDial.Color)

            Me.lblOriginal.BackColor = ColorDial.Color
            Me.lblComplemantary.BackColor = colorComplementary
            Me.lblReverseColor.BackColor = colorReverse

            Me.lblComplemantaryText.ForeColor = ColorDial.Color
            Me.lblComplemantaryText.BackColor = colorComplementary

            Me.lblReverseColorText.ForeColor = ColorDial.Color
            Me.lblReverseColorText.BackColor = colorReverse


        End If
    End Sub

    ''' <summary>
    ''' 보색을 구하는 Procedure
    ''' </summary>
    ''' <param name="myColor"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>

    Public Function ComplementaryColor(ByVal myColor As Color) As Color

        Dim intColor(2) As Integer

        Dim colorRed As Integer = myColor.R
        Dim colorBlue As Integer = myColor.B
        Dim colorGreen As Integer = myColor.G

        intColor(0) = colorRed
        intColor(1) = colorBlue
        intColor(2) = colorGreen

        Array.Sort(intColor)

        Dim colorSum As Integer = intColor(0) + intColor(2)

        Dim intNewRed As Integer = colorSum - colorRed
        Dim intNewBlue As Integer = colorSum - colorBlue
        Dim intNewGreen As Integer = colorSum - colorGreen

        Return Color.FromArgb(intNewRed, intNewGreen, intNewBlue)

    End Function

    ''' <summary>
    ''' 반전색상을 구하는 Procedure
    ''' </summary>
    ''' <param name="myColor"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    
    Public Function ReverseColor(ByVal myColor As Color) As Color
        Dim intNewRed As Integer = 255 - myColor.R
        Dim intNewGreen As Integer = 255 - myColor.G
        Dim intNewBlue As Integer = 255 - myColor.B
        Return Color.FromArgb(intNewRed, intNewGreen, intNewBlue)
    End Function


이것이 실행시켰을 때의 모습이다.

난감하게도 처음에 선택한 색상이 보색과 반전색상이 일치했다. 
빨강이나 노랑, 파랑을 선택해 보라 ㅡㅡ'

그래서 뭐 이래~~ 하면서 약간 실망했으나... 
그래도 색상을 선택하며 봤더니 차이가 있더군... 위와같이...ㅋㅋ

그리고 이렇게 테스트를 해보니 이번프로젝트에서는 일러스트레이터에서 정의한 보색을 사용하기 보다는 아래의 반전색을 선택하는 것이 더욱 좋을 것으로 생각된다.
이유는 반전색이 보색보다 내용과 배경이 확실하게 보이잖아. ^^'

반전색상을 쓰자고 건의 해봐야겠다.

훔... 

오늘은 색상에 대한 테스트 였다...


그럼 모두들 행복한 고수되셔요... ^^



woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

반응형

+ Recent posts