如何使用Canvas.clipRects突出显示面部表情?

时间:2014-02-06 03:26:47

标签: android android-canvas draw android-image android-bitmap

我有一个包含多个面的位图。我想要突出显示每个面部,使面部具有原始颜色,并且该区域的其余部分被涂黑。

我做了类似的事,

                   for(int i=0; i<getNumFaces(); i++)
                    {   

                    Rect rect = getRect();                                  
                    canvas = new Canvas(mutableBitmap);
                    canvas.clipRect(rect, Region.Op.DIFFERENCE);
                    canvas.drawColor(Color.BLACK, Mode.SRC_ATOP);


                    }                       

                  confirmationView.setImageBitmap(mutableBitmap);   

但是这使我的整个图像变黑。我知道原因,但无法找到解决方案。

1 个答案:

答案 0 :(得分:0)

可能有更好的方法,但试试这个:

               canvas = new Canvas(mutableBitmap);
               for(int i=0; i<getNumFaces(); i++)
                {   

                Rect rect = getRect();                                  
                canvas.clipRect(rect, Region.Op.UNION);


                }                       
                Rect all = new Rect(0,0,mutableBitmap.getWidth(), mutableBitmap.getHeight());
                canvas.clipRect(all , Region.Op.DIFFERENCE);
                canvas.drawColor(Color.BLACK);

              confirmationView.setImageBitmap(mutableBitmap);   

注意:我实际上并没有运行它。但它建立了一个大的剪辑区域,包括你想要保留的所有角色。然后它创建一个包含所有位图的剪辑,除了你想要保留的区域。然后着色你不想留下的部分。