PorterduffXfermode: Clear a section of a bitmap

前端 未结 3 1369
北恋
北恋 2020-12-02 20:36

The goal is to draw a bitmap and over the top of something, and draw shapes that ERASE the underlying area of the bitmap.

I have a proof of concept to try and underst

相关标签:
3条回答
  • 2020-12-02 21:06

    The problem is hardware acceleration. Turn it OFF for the particular View that you are painting with CLEAR. If you're using a custom view, do this in the constructors:

    if (android.os.Build.VERSION.SDK_INT >= 11) 
    {
         setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }
    

    You can also call setLayerType on a view reference.

    0 讨论(0)
  • 2020-12-02 21:09

    As Romain Guy points out here: google stuff you need to write on the Bitmap, not the canvas with the circles you are trying to clear, then set it to the main Canvas in your View. So, do something like:

    // Generate bitmap used for background
                bm = BitmapFactory.decodeFile("mnt/sdcard/Pictures/test.jpg");
    
    // Create the paint and set the bitmap
    Canvas temp = new Canvas(bm.getHeight(), bm.getWidth, Config.ARGB_8888);
    
    // in onDraw()
    temp.drawCircle((w / 8) * (ii * 2 + 1), (h / 8) * (i * 2 + 1), w / 8 * 0.8f, pDraw[i*4 + ii]);
    
    // After loop
    canvas.drawBitmap(....);
    

    Hope this helps.

    0 讨论(0)
  • 2020-12-02 21:21

    I don't see anything unexpected. In the particular case of Mode.CLEAR, both the color and alpha of the destination are cleared, which allows the black background to show. This utility allows one to experiment with various modes, colors and alpha values, and the source may offer some insight. In the (somewhat dated) image below, the CLEAR areas reveal the faint pinstripe-gray provided by the platform's PanelUI delegate.


    (source: Composite at sites.google.com)

    0 讨论(0)
提交回复
热议问题