2017-10-12 1 views
0

그림 응용 프로그램을 개발하고 그림의 특수 영역을 지우려면 지우개 도구를 구현해야합니다. 지우개는 일부 원형 영역을 고르게 지워야합니다. 즉, 원의 중심 만 완전히 지워지고 원의 모서리는 알파로 부분적으로 지워 져야합니다.특수 비트 맵 형식의 캔버스 영역을 지움

private val picture: Bitmap 
    private val bgPaint = Paint() 
    private var eraser: Bitmap 

    private val eraserPaint: Paint = Paint().apply { 
    val mode: PorterDuff.Mode = PorterDuff.Mode.SRC_OUT 
    xfermode = PorterDuffXfermode(mode) 
    color = Color.TRANSPARENT 
    alpha = 0 
    } 

    init { 
    val options = BitmapFactory.Options() 
    options.inMutable = true 
    picture = BitmapFactory.decodeResource(resources, R.drawable.petushara, options) 
    eraser = BitmapFactory.decodeResource(resources, R.drawable.eraser, options) 
    setLayerType(View.LAYER_TYPE_SOFTWARE, bgPaint) 
    } 

    override fun draw(canvas: Canvas) { 
    super.draw(canvas) 
    canvas.drawBitmap(picture, 0f, 0f, bgPaint) 
    canvas.drawBitmap(eraser, 100f, 300f, eraserPaint) 
    } 
:

내가보기의 일부 영역을 지우려면,

enter image description here

그런 다음 지우개의 그림을 representes 이미지를 만들어이 동작을 달성하기 위해,이 같은 일부 사진 위의 지우개의 그림을 그립니다

이것은 전체보기 클래스이며 생성자는 제외됩니다. 나는 사진의 영역 지우개의 그림에 의해 삭제됩니다 기대하지만,이 같은 사각형의 그림에 의해 삭제합니다 :

enter image description here

답변

0

좋아, 난 그냥 해결책을 발견했다. 이 같은 코드를 작성합니다 :

private val picture: Bitmap 
    private val bgPaint = Paint() 
    private var eraser: Bitmap 

    private val eraserPaint: Paint = Paint().apply { 
    val mode: PorterDuff.Mode = PorterDuff.Mode.XOR 
    xfermode = PorterDuffXfermode(mode) 
    } 

    init { 
    val options = BitmapFactory.Options() 
    options.inMutable = true 
    picture = BitmapFactory.decodeResource(resources, R.drawable.petushara, options) 
    eraser = BitmapFactory.decodeResource(resources, R.drawable.eraser, options) 
    setLayerType(View.LAYER_TYPE_SOFTWARE, bgPaint) 
    } 

    override fun draw(canvas: Canvas) { 
    super.draw(canvas) 
    canvas.drawBitmap(picture, 0f, 0f, bgPaint) 
    canvas.drawBitmap(eraser, 100f, 300f, eraserPaint) 
    } 

그런 다음 사진을 결과는 나의 기대처럼 보인다 : 사실

enter image description here

+0

이 내가하지 않는 것이 좋습니다 솔루션입니다. 이미 지워진 영역을 지우려고하면이 영역은 지우개 색으로 채색됩니다. 우리의 경우 블랙 –

관련 문제