Android
PorterDuff 모드
수색…
소개
PorterDuff은 서로 겹쳐진 "불규칙한 모양의 판지"처럼 이미지를 결합하는 방법과 겹치는 부분을 블렌딩하는 방법으로 설명됩니다.
비고
"Porter Duff"자체는 토마스 포터 (Thomas Porter)와 톰 더프 (Tom Duff)가 쓴 종이의 이름을 딴 알파 합성 기술 입니다.
요약하면이 기술은 두 개의 이미지를 알파 채널로 사용하고 두 이미지의 픽셀 값을 결합하여 출력 이미지를 생성합니다. 다양한 결합 모드로 인해 서로 다른 출력 이미지가 생성됩니다. 예를 들어, 다음 이미지에서 파란색 모양 (원본, 기존 픽셀)은 다른 모드에서 노란색 모양 (대상, 새 픽셀)과 결합됩니다.
PorterDuff ColorFilter 만들기
PorterDuff.Mode
만드는 데 사용됩니다 PorterDuffColorFilter
. 색상 필터는 시각적 자원의 각 픽셀의 색상을 수정합니다.
ColorFilter filter = new PorterDuffColorFilter(Color.BLUE, PorterDuff.Mode.SRC_IN);
위의 필터는 불투명 한 픽셀을 파란색으로 채 웁니다.
컬러 필터는 Drawable
적용 할 수 있습니다.
drawable.setColorFilter(filter);
ImageView
적용 할 수 있습니다.
imageView.setColorFilter(filter);
또, Paint
적용하면 (자) Paint
에 의해 그려지는 색이 필터에 의해 변경됩니다.
paint.setColorFilter(filter);
PorterDuff XferMode 만들기
Xfermode
( "전송"모드라고 생각 함)는 드로잉 파이프 라인의 전송 단계로 작동합니다. Xfermode
가 Paint
적용되면 Paint
그려지는 픽셀은 모드별로 다음과 같은 기본 픽셀과 결합됩니다.
paint.setColor(Color.BLUE);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
이제 푸른 색조 페인트가 있습니다. 그려진 모든 도형은 이미 존재하는 투명하지 않은 픽셀을 도형 영역에 파란색으로 채 웁니다.
PorterDuffXfermode를 사용하여 방사형 마스크 (비 네트)를 비트 맵에 적용합니다.
/**
* Apply a radial mask (vignette, i.e. fading to black at the borders) to a bitmap
* @param imageToApplyMaskTo Bitmap to modify
*/
public static void radialMask(final Bitmap imageToApplyMaskTo) {
Canvas canvas = new Canvas(imageToApplyMaskTo);
final float centerX = imageToApplyMaskTo.getWidth() * 0.5f;
final float centerY = imageToApplyMaskTo.getHeight() * 0.5f;
final float radius = imageToApplyMaskTo.getHeight() * 0.7f;
RadialGradient gradient = new RadialGradient(centerX, centerY, radius,
0x00000000, 0xFF000000, android.graphics.Shader.TileMode.CLAMP);
Paint p = new Paint();
p.setShader(gradient);
p.setColor(0xFF000000);
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
canvas.drawRect(0, 0, imageToApplyMaskTo.getWidth(), imageToApplyMaskTo.getHeight(), p);
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow