2017-02-16 136 views
2

假設我有一張肖像位圖,這是我用前置攝像頭拍攝的。 拍攝照片後,如何將位圖裁剪爲橢圓形覆蓋圖的形狀?橢圓形狀以屏幕爲中心。橢圓形的形狀已經固定的高度和寬度Android位圖裁剪橢圓形

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

<FrameLayout 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

<!-- camera viewfinder here which fits the whole screen--> 
<RelativeLayout 
    android:id="@+id/cameraLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="60dp" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentTop="true" 
     android:paddingTop="10dp"> 

     <!--Custom buttons--> 

    </RelativeLayout> 

    <RelativeLayout 
     android:id="@+id/record_panel" 
     android:layout_width="match_parent" 
     android:layout_height="150dp" 
     android:background="@android:color/transparent" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true"> 

     <!--Capture button--> 

    </RelativeLayout> 

</RelativeLayout> 

<!--the oval-shaped overlay--> 
<ImageView 
    android:layout_width="210dp" 
    android:layout_height="318dp" 
    android:id="@+id/overlay" 
    android:layout_gravity="center" 
    android:src="@mipmap/oval" /> 

</FrameLayout> 

截圖: enter image description here

+0

你是怎麼解決它的? –

回答

0

您可以基於你如何從一個位圖裁剪圈的解決方案:

@Override 
    public Bitmap crop(Bitmap source) { 
     int size = Math.min(source.getWidth(), source.getHeight()); 

     int x = (source.getWidth() - size)/2; 
     int y = (source.getHeight() - size)/2; 

     Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); 
     if (squaredBitmap != source) { 
      source.recycle(); 
     } 

     Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); 

     Canvas canvas = new Canvas(bitmap); 
     Paint paint = new Paint(); 
     BitmapShader shader = new BitmapShader(squaredBitmap, 
       BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); 
     paint.setShader(shader); 
     paint.setAntiAlias(true); 

     float r = size/2f; 
     canvas.drawCircle(r, r, r, paint); 

     squaredBitmap.recycle(); 
     return bitmap; 
    } 

現在只是改變canvas.drawCircle到​​並給它適當的值。