ProgramingTip

Java / Android color int의 알파 바이트 조작

bestdevel 2020. 11. 12. 19:27
반응형

Java / Android color int의 알파 바이트 조작


Android 색상 (캔버스에 그리기 위해)로 사용중인 Java에 int가있는 경우 해당 int의 알파 구성 요소를 어떻게 조작합니까? 예를 들어이 작업을 수행해야합니까?

int myOpaqueColor = 0xFFFFFF;
float factor = 0;
int myTransparentColor = operationThatChangesAlphaBytes(myOpaqueColor, factor);
//myTransparentColor should now = 0x00FFFFFF;

이상적으로 factor는 바이트를 정적 값으로 설정하는 것보다 첫 번째 바이트에 무엇이든지 곱하는 것이 좋습니다 .


색상 클래스를 확인하십시오 .

코드는 다음과 같이 보일 것입니다.

int color = 0xFFFFFFFF;
int transparent = Color.argb(0, Color.red(color), Color.green(color), Color.blue(color));

따라서 방법은 다음과 같다.

@ColorInt
public static int adjustAlpha(@ColorInt int color, float factor) {
    int alpha = Math.round(Color.alpha(color) * factor);
    int red = Color.red(color);
    int green = Color.green(color);
    int blue = Color.blue(color);
    return Color.argb(alpha, red, green, blue);
}

그런 다음이를 호출하여 투명도를 50 %로 설정합니다.

int halfTransparentColor = adjustAlpha(0xFFFFFFFF, 0.5f);

색상 클래스를 사용하는 것은 비트 조작을 직접 수행하고 이미 수행 한 것보다 조금 더 자체 문서화라고 생각합니다.


사용 ColorUtils # setAlphaComponent을 안드로이드 지원 -V4에.


안드로이드 지원 -V4 :

int alpha = 85; //between 0-255
@ColorInt
int alphaColor = ColorUtils.setAlphaComponent(Color.Red, alpha);

대안은 다음과 가변합니다.

int myOpaqueColor = 0xffffffff;
byte factor = 20;// 0-255;
int color = ( factor << 24 ) | ( myOpaqueColor & 0x00ffffff );

또는 float 사용 :

int myOpaqueColor = 0xffffffff;
float factor = 0.7f;// 0-1;
int color = ( (int) ( factor * 255.0f ) << 24 ) | ( myOpaqueColor & 0x00ffffff);

비트 값을 변경하여 모든 채널을 사용할 수 있습니다 24.

public final static byte ALPHA_CHANNEL = 24;
public final static byte RED_CHANNEL   = 16;
public final static byte GREEN_CHANNEL =  8;
public final static byte BLUE_CHANNEL  =  0;

// using:
byte red   = 0xff;
byte green = 0xff;
byte blue  = 0xff;
byte alpha = 0xff;
int color = ( alpha << ALPHA_CHANNEL ) | ( red << RED_CHANNEL ) | ( green << GREEN_CHANNEL ) | ( blue << BLUE_CHANNEL );// 0xffffffff

이 질문에 직접 답하는 것이 좋습니다. View와 Drawable은 원하는 작업을 수행 할 수있는 setAlpha (float alpha) 메소드가있는 것을 기억하는 것이 좋습니다. 또는 view.getBackground (). setAlpha ()를 시도 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/15319635/manipulate-alpha-bytes-of-java-android-color-int

반응형