.NET/VB.NET
[VB.NET] 보색 간단하게 구하기
WooGong Peter
2009. 4. 30. 21:46
이번 진행중인 Project 에서 grid 의 Row 값에 따라 Blinking 을 해야만 했다.
한마디로 번쩍임을 말한다.
그런데 번쩍거릴때 Row 의 ForeColor 와 BackColor 가 보색관계를 가져야 한다는 요구사항이 나왔다.
많이 해맸다.
C코드도 변환해 보고...
그런데 그 코드가 잘못된건지...아니면 내가 잘못 변환을 한건지는 모르겠으나
원하는 색깔이 나오지 않았다.
구글을 뒤졌지.. ㅋㅋ
보색의 정의에서부터...
간단히
'보색(補色)'이란 혼합했을 때 무채색이 되는 두 색.
즉, '색상환'에서 반대편의 색.
색상환?
이런거다...
초등학교때 배운건
요거다
다 기억들 나실 거다.
초등학교 교과과정에는 요로케 배운다는 군...
기본이 되는 10가지의 색 : 빨강,주황,노랑,연두,녹색,청록,파랑,남색,보라,자주 유사색 : 한색을 중심으로 이웃하는 색들 반대색 : 한색을 중심으로 반대쪽에 있는 색들 |
(이거 분명히 시험에 날거다... ㅡㅡ' 나왔던거 같기도하고...)
색상환이란 뭐었이냐? 틀린답은?
10색상환에 들어가지 않는 색은? 4번 자주 ㅡㅡ'
우리의 위대하신 정책임님께서는 아직도 10색상환을 외우고 계신다. 10색상환 완전정복. ㅡㅡ'
(내일 내게 커다란 V 자를 내미실 정책임님 얼굴이 선하다. (- ㅡ)V 요로케... ^^)
초등생들이 미술시간에 색상환에 대해 어떻게 배우는지 알고 싶다면
http://www.topianet.co.kr/topia/3/3m/3m050101.htm 에 가보라... 더 자세히 알 수 있다.
그리고 이렇게 색에 관해서 알기쉽게? 정리 해 놓은 사이트도 있더라...
http://www.designview.co.kr/color3.htm
일단은 요까이 하자.
그리고 결정적으로 알기쉽게 정리해 놓은 싸이트가 있었으니...
그이름도 유명한 아도브다...(혹자는 어도비라고 하드라...)
난 아도브가 좋드라...어도브 도 뭐 괜찮고... ㅋㅋ
양놈들은 뭐라하는지 모르겠다.. 우짜 똥꼬집. ㅡㅡ'
System을 씨스팀이라고 하는 사람도 있더만... ㅡㅡ
여튼 아래는 일러스트레이트에서 구현한 보색의 방식이다.
http://help.adobe.com/ko_KR/Illustrator/13.0/help.html?content=WS714a382cdf7d304e7e07d0100196cbc5f-6288.html
|
반전에 대한 정의도 따라왔다.
걍 긁어다 붙였다. ㅡㅡ
요 내용을 바탕으로 소스를 구현해 봤다.
''' <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 ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형