최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday

티스토리 뷰

   색상의 알파값(투명도) 16진수계산


액션스크립트나 자바스크립트 여타 프로그래밍에서 16진수로 알파값이 포함될때가 있다.

 

액션스크립트 기준으로 Bitmap객체를 잠시 설명하면 매개변수가 다음과 같은 차례를 가진다.


width, height, transparnet:Boolean(투명도지원여부), fillColor(기본값은0xFFFFFFFF 흰색)

 ㅎ

예1 ) 300 x 300 크기의 불투명 빨간색 BitmapData객체를 만들면 다음과 같다.

var bmpData:BitmapData = new BitmapData(300, 300, false, 0xFF0000);  //여기까지는 이해가능

 

예2 ) 100 x 100 크기의 투명도가 50%인 빨간색 BitmapData객체는 다음과 같다.

var bmpData:BitmapData = new BitmapData(100, 100, true, 0x80FF0000); 

 

transparnet은 투명도의 지원여부이니 true가 맞는데, 색상부분을 보면 80이라는 숫자가 들어간다.

 

0x 부분이 16진수를 뜻하기때문에 투명도도 16진수로 적어줘야 한다.

 

자, 일단 투명도가 50%일경우 10진수로는 128이고 이를 16진수로는 변환하면 80이 된다.

 

toString메서드를 이용하여 128을 .toString(16) 해보면 80이 나올것이다.

 

그런데 우리가 알아야 할 값은 80이 아니라 메서드에 적용시킬 128 이다.

 

어떻게 해서 10진수인 128이란 값을 얻을수 있을까?



   공식화


퍼센트 * 2.55 = 반올림(n)

 

예1) 투명도가 50%일경우

 

50 * 2.55 = 127.5

 

127.5 에서 소수점.5를 반올림하면 128.

 

128을 toString(16)메서드를 이용하여 16진수로 바꾸면 결과는 80

var num:int = 128;
trace(num.toString(16)); //-> 결과80

 

투명도가 100%일때

 

예) 100 * 2.55 = 255 를 toString메서드를 이용하여 16진수로 바꾸면 결과는 FF

var num:int = 255;
trace(num.toString(16)); //-> 결과FF


    함수화


조금 더 나아가서 함수화 해보자.

var myAlpha1:* = hexCode(100);
trace(myAlpha1); //ff

var myAlpha2:* = hexCode(50);
trace(myAlpha2); //80

function hexCode($num:int):*
{
 var num:int = $num;
 var myHex:int = Math.round((num * 2.55) + 0.1);
 return myHex.toString(16);
}

1,4 : 앞의경우 데이터타입이 문자(FF)일수도, 숫자(80)일수도 있었다. 이 때문에 아직 Type이 정의되지 않은 *(와일드카드)형으로 선언했다.

 

7 : 함수의 리턴값도 당연히 *

 

10 : num * 2.55 의 값을 반올림 하는것은 앞에서 설명했다.

 

     그러나.. num = 50 * 2.55 할 경우 값이 우리가 원하는 127.5가 나오는게 아니라 126.499999999999999999.. 가 나온다.

 

     그래서 +0.1 정도로 값을 증가해주어 127.5로 만들어서 반올림해준것이다.





댓글