2012-07-27

Android Image應用(二) - 裁剪圖片 for 取得手機內圖檔時

有介紹過取得手機內圖檔使用拍照功能,拍出來的大多都是1:2或2:1的長寬

如果我們想要的是1:1的圖片呢?怎麼辦?拿剪刀?從手機讀出來用圖片編輯軟體

裁剪後再放回去?當然不是這樣的,這樣太麻煩了,如果能直接裁剪當然是最好的

所以下面就為您介紹直接在取得圖檔時就執行裁剪圖片的動作。


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="vertical"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    >  
   <Button   
        android:id="@+id/b01"  
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content&
    />  
    <ImageView  
        android:id="@+id/iv01"  
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"   
     />  
</LinearLayout>  


GetPicturesActivity.java
package jim.demo.getpictures;

import java.io.File;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class GetPicturesActivity extends Activity {
 private File tempFile;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        this.tempFile = new File("/sdcard/a.jpg");// 這句一定要在onCreate()里面調用
        
        //找尋Button按鈕
        Button button = (Button)findViewById(R.id.b01);
        //設定按鈕內文字
        button.setText("選擇圖片");
        //設定按鈕監聽式
        button.setOnClickListener(new Button.OnClickListener(){
   public void onClick(View v) {
     Intent intent = new Intent();
          // 開啟Pictures畫面Type設定為image
          intent.setType("image/*");
          // 使用Intent.ACTION_GET_CONTENT這個Action
          // 會開啟選取圖檔視窗讓您選取手機內圖檔 
          intent.setAction(Intent.ACTION_GET_CONTENT); 
          intent.setType("image/*");
          intent.putExtra("crop", "true");// crop=true 有這句才能叫出裁剪頁面.
          intent.putExtra("aspectX", 1);// 这兩項為裁剪框的比例.
          intent.putExtra("aspectY", 1);// x:y=1:1
          intent.putExtra("output", Uri.fromFile(tempFile));
          intent.putExtra("outputFormat", "JPEG");//返回格式
                    
          // 取得相片後返回本畫面
           startActivityForResult(Intent.createChooser(intent, "選擇圖片"),1);
   }
         
        });
    }
    
    //取得相片後返回的監聽式
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  //取得圖片控制項ImageView
  ImageView imageView = (ImageView) findViewById(R.id.iv01);
  
  //當使用者按下確定後
  if (resultCode == RESULT_OK) {
       
   // 設定到ImageView 
   imageView.setImageDrawable(Drawable.createFromPath(tempFile.getAbsolutePath()));
     
  }
  super.onActivityResult(requestCode, resultCode, data);
 }
}

執行畫面




後記:

          切割其實是使用intent.setAction(Intent.ACTION_GET_CONTENT)抓取圖片後

再多加一個動作使用intent.putExtra("crop", "true")叫出裁剪頁面達到裁剪效果

還蠻簡單的,下篇再為您介紹在拍照後如果要裁剪照片該怎麼做,感謝收看。

5 則留言:

  1. 您好!請問剪裁的部分是否可以改為不規則圖片的外框呢?
    請問有相關建議的方法嗎?

    謝謝您!

    回覆刪除
  2. 您好!請問剪裁的部分是否可以改為不規則圖片的外框呢?
    請問有相關建議的方法嗎?

    謝謝您!

    回覆刪除
  3. public void onClick(View v) {
    Intent intent = new Intent();
    startActivityForResult(Intent.createChooser(intent, "選擇圖片"),1);
    }
    我只有這樣他也讓我切

    回覆刪除

您的寶貴建議是我前進的動力!