2017-10-12 16 views
0

私は描画アプリケーションを開発します。画像の特殊領域をクリアするには、消しゴムツールを実装する必要があります。消しゴムは円の一部を不均一に消去する必要があります。つまり、円の中心だけを完全に消去し、円の端をアルファで部分的に消去する必要があります。特別なビットマップ形式のキャンバス領域をクリアする

私は、ビューのいくつかの領域を消去し、その後、消しゴムの姿

enter image description here

をrepresentes画像を作成し、この動作を達成するために、私はこのようないくつかの絵の上に消しゴムの姿を描く:

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

答えて

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

実は、この私ではない最善の解決策。すでに消去された領域を消去しようとすると、この領域は消去イメージの色で色づけされます。私たちの場合は黒 –

関連する問題