수색…


소개

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 ( "전송"모드라고 생각 함)는 드로잉 파이프 라인의 전송 단계로 작동합니다. XfermodePaint 적용되면 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