2015-01-06 4 views
10

페인트를 시작할 때 전체 배경에 색상이 지정됩니다. 즉, 흰색 부분 만 칠해 야합니다. 응용 프로그램 화면 캡처는 다음과 같습니다. Android Paint를 사용하여 배경 드로어 블 팬더 [Panda]에 흰색 점만 페인트하고 다른 색상은 건너 뜁니다.안드로이드 페인트로 배경 이미지 색상 감지

onDraw() 기능은 다음과 같습니다

protected void onDraw(Canvas canvas) { 

    canvas.drawPath(path, paint); 
    canvas.drawPath(circlePath, circlePaint); 

    for (Pair<Path,Integer> path_clr : path_color_list){ 
     paint.setColor(path_clr.second); 
     canvas.drawPath(path_clr.first, paint); 
    } 

    for (Pair<Path,Integer> path_clr : circular_path_color_list){ 
     circlePaint.setColor(path_clr.second); 
     canvas.drawPath(path_clr.first, paint); 
    } 
} 

onTouchEvent 기능은 다음과 같습니다

public boolean onTouchEvent(MotionEvent event) { 

    float pointX = event.getX(); 
    float pointY = event.getY(); 
    switch (event.getAction()) { 
    case MotionEvent.ACTION_DOWN: 
     circlePath.reset(); 
     path.moveTo(pointX, pointY); 

     return true; 
    case MotionEvent.ACTION_MOVE: 
     path.lineTo(pointX, pointY); 
     circlePath.reset(); 
     circlePath.addCircle(pointX, pointY, 10, Path.Direction.CW); 

     break; 

    case MotionEvent.ACTION_UP: 
     circlePath.reset(); 

     break; 
    default: 
     return false; 
    } 

    postInvalidate(); 
    return true; 
} 

Color Activity

답변

6

당신이 설명하고있는 것은 마스킹이라고합니다. 마스크 (흰 부분)와 마스크 된 이미지 (스트로크)가 필요합니다. 그림을 그릴 때 마스크를 사용하여 획을 마스크 모양으로 자르십시오. PorterDuff 모드를 사용하여 수행 할 수 있습니다. 의사 코드를 참조하십시오

Bitmap panda; 
Bitmap whiteAreas; 
Bitmap strokes; 
Canvas strokesCanvas; 
Paint paint; 

private void init() { 
    strokesCanvas = new Canvas(strokes); 
    paint = new Paint(); 
} 

private void addStroke(Path stroke){ 
    paint.setXfermode(null); 
    strokesCanvas.drawPath(stroke,paint); 
    invalidate(); 
} 

@Override 
public void draw(Canvas canvas) { 
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN)); 
    strokesCanvas.drawBitmap(whiteAreas,0,0,paint); 
    paint.setXfermode(null); 
    canvas.drawBitmap(panda,0,0,paint); 
    canvas.drawBitmap(strokes,0,0,paint); 
} 

더 많은 정보를 원하시면 링크를 참조하십시오 : http://ssp.impulsetrain.com/porterduff.html


편집 : 여기 그것이 작동하는 방법 이미지가 있습니다. 파란색 영역은 투명해야합니다. 마스크와 획 사이의 곱셈은 마스킹이라고합니다.

enter image description here

+0

미안하지만 비트 맵 마스킹에 대한 지식이 없습니다. 'Bitmap whiteAreas'는 어떤 값으로 초기화 될까요! '비트 맵 스트로크 '와 같은 문제가 있습니다. –

+0

whiteAreas는 그 이름이 말하는 것입니다 - 팬더 이미지만큼 큰 비트 맵, 투명한 배경, 팬티의 얼굴과 배꼽이 그려져 있습니다. 스트로크 비트 맵은 사용자가 수행 한 도면을 유지하는 데 사용됩니다. 나는 당신을위한 이미지를 준비했습니다 – Zielony

+0

죄송합니다.하지만 요점을 얻지는 못했습니다. (저는'view' 클래스에서 마스크와 스트로크 비트 맵을 어떻게 생성할까요? 'view'에서 확장 –