문제

AS3에서는 RGB 색상 (예 : 0xFF0000)과 알파 값 (예 : .5)을 32 비트 ARGB 값으로 변환하는 유틸리티 또는 기능이 있습니까?

그리고 ARGB에서 RGB + 알파까지?

일부 설명 : BitMapData는 생성자에서 ARGB 값을 취할 수 있지만 스프라이트의 채우기는 일반적으로 RGB 값을 취합니다. 앞서 언급 한 유틸리티가 색상이 일치하도록하기를 원합니다.

도움이 되었습니까?

해결책

var argb  : int = (alpha<<24)|rgb;
var rgb   : int = 0xFFFFFF & argb;
var alpha : int = (argb>>24)&0xFF;

다른 팁

A, R, G, B는 비디오 카드에서 "텍스처 블렌딩"및 텍스처의 투명성을 허용하기 위해 사용되는 일반적인 형식입니다. 대부분의 시스템은 R, G 및 B에 8BIT 만 사용하므로 PC에서 흔한 32 비트 단어 크기에서 8BITS를 추가로 남겨 둡니다.

The mapping is:

For Bits:
33222222 22221111 11111100 00000000
10987654 32109876 54321098 76543210

AAAAAAAA RRRRRRRR GGGGGGGG BBBBBBBB
00000000 RRRRRRRR GGGGGGGG BBBBBBBB

이 같은:

private function toARGB(rgb:uint, newAlpha:uint):uint{
  var argb:uint = 0;
  argb = (rgb);
  argb += (newAlpha<<24);
  return argb;
}

private function toRGB(argb:uint):uint{
  var rgb:uint = 0;
  argb = (argb & 0xFFFFFF);
  return rgb;
}

알파를 8 비트로 표현할 수 있다면 가능합니다. 예를 들어 해당 변수에 대한 32 비트 ArgB 값의 각 영역을 매핑하십시오.

0x0abcdef1

알파 -0x0a

빨간색 -0xBC

녹색 -0xde

파란색 -0xf1

private function combineARGB(a:uint,r:uint,g:uint,b:uint):uint {
            return ( (a << 24) | ( r << 16 ) | ( g << 8 ) | b );
        }

위의 훌륭한 답변에 더 많은 것을 추가 할 수는 없지만 더 단순하게 말하면 알파 값은 UINT의 마지막 두 자리입니다.

//white
var white:uint = 0xFFFFFF;

//transparent white
var transparent:uint = 0xFFFFFFFF;

척도는 평소와 같이 00 = 1 ff = 0입니다.

도움이 되었기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top