2013-01-24 70 views
0

我試圖從方塊和相機中以方形形狀裁切照片。從畫廊的作品完美,畫廊打開,我選擇圖片,然後作物框架始終保持正方形的形狀,即使我調整它的大小。但是當我對相機拍攝的照片做同樣的處理時,無論我在代碼中改變了什麼,裁剪框都保持矩形。ANDROID作物:方形作物

我讀到這可以通過aspectXaspectY更改,但我仍然得到相同的結果。 目前我的代碼如下:?

Intent i = new Intent("android.media.action.IMAGE_CAPTURE"); 
      File f = new File(Environment.getExternalStorageDirectory(), "photo.png"); 
      i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
      i.putExtra("crop", "true"); 
      i.putExtra("outputX", 320); 
      i.putExtra("outputY", 320); 
      i.putExtra("aspectX", 320); 
      i.putExtra("aspectY", 320); 
      i.putExtra("scale", true);  

      mUri = Uri.fromFile(f); 
      startActivityForResult(i, CAMERA_PICTURE); 

是否有身體有辦法來配置裁剪框始終保持方形... 提前感謝!

回答

0

你真的想這樣嗎?

嘗試使位圖和一些可繪製的連接畫布到位圖繪製到可繪製的畫布 並保存位圖。

如果你有問題,它也許可以寫你 //但是從文件 創建位圖//

BitmapDrawable returnedBitmap = BitmapDrawable(String filepath); // here you create image with size of image 
Canvas canvas = new Canvas(returnedBitmap); // here you attach canvas to bitmap 
drawable.draw(canvas); // here you tell to you drawable that you want to draw to this canvas drawable know canvas size and it automatically resize it self to fill canvas. Also you can read another image an use it. 

,也許你打電話調整功能進行一定的規模。

提拉 :)這是我的意思是說只是做外顏色的使內側透明

<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <gradient android:startColor="#554C5466" android:centerColor="#55334255" android:endColor="#ff3D5A99" android:angle="270"/> 
    <stroke android:width="1px" android:color="#ffffffff" /> 
    <corners android:radius="10dp"/>  
</shape> 

,並保存位圖到文件

+0

謝謝@Mertuarez,但請你詳細闡述一下還有一個小例子?我不明白這個代碼的哪一部分圖像會以正方形的形狀和我需要的正方形的大小裁剪。再次感謝! – Manyfatboy

0

嘗試這個辦法:

Bitmap m_bitmap = BitmapFactory.decodeFile(m_Path); 
    Intent m_cropIntent = new Intent("com.android.camera.action.CROP"); 
    // indicate image type and Uri 
    m_cropIntent.setDataAndType(Uri.fromFile(new File(m_Path)), "image/*"); 
    // set crop properties 
    m_cropIntent.putExtra("crop", "true"); 
    // indicate aspect of desired crop 
    m_cropIntent.putExtra("aspectX", 1); 
    m_cropIntent.putExtra("aspectY", 1); 
    // indicate output X and Y 
    m_cropIntent.putExtra("outputX", 256); 
    m_cropIntent.putExtra("outputY", 256); 
    // retrieve data on return 
    m_cropIntent.putExtra("return-data", true); 
    // start the activity - we handle returning in onActivityResult 
    startActivityForResult(m_cropIntent, 1); 
+0

謝謝@Grishu,但是我不推薦從'com.android.camera.action.CROP'離開。 – Manyfatboy