2012-08-01

Android Image應用(四) - 旋轉圖片

如果您有用到拍照或取得圖片功能時應該會知道,得到的照片或圖片會剛好跟我們想要的

差了90度,怎麼辦呢?這裡就為您介紹怎麼把圖片轉向90度的方法


main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="300dp"
            android:layout_height="300dp"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/ic_launcher" />

    </RelativeLayout>


    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="60dp"
            android:text="@string/right" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="60dp"
            android:text="@string/left" />

    </RelativeLayout>

</LinearLayout>



strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">DemoImageRotation</string>
    <string name="left">左旋90度</string>
    <string name="right">右旋90度</string>
</resources>


DemoImageRotationActivity.java
package jim.demo.ImageRotation;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

public class DemoImageRotationActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
      //圖片左旋90
        Button button_left = (Button)findViewById(R.id.button1);
        View.OnClickListener listener_left = new View.OnClickListener() {  
         
         public void onClick(View view) { 
         //取得圖片
         ImageView imageView_left = (ImageView) findViewById(R.id.imageView1);
         //imageView_left.setDrawingCacheEnabled(true);
         //建立圖片的緩存,圖片的緩存本身就是一個Bitmap
         imageView_left.buildDrawingCache();
         //取得緩存圖片的Bitmap檔
         Bitmap bmp=imageView_left.getDrawingCache();
         //定義一個矩陣圖
         Matrix m=new Matrix();
         //取得圖片的寬度
                int width=bmp.getWidth();
                //取得圖片的長度
                int height=bmp.getHeight();
                //逆時針旋轉90度
                m.setRotate(-90);
              //產生新的旋轉後Bitmap檔
                Bitmap b=Bitmap.createBitmap(bmp, 0, 0, width, height, m, true);
                
                //顯示圖片
                imageView_left.setImageBitmap(b);
            }  
        };  
        button_left.setOnClickListener(listener_left); 
        
        
      //圖片右旋90
        Button button_right = (Button)findViewById(R.id.button2);
        View.OnClickListener listener_right = new View.OnClickListener() {  
         public void onClick(View view) {  
         //取得圖片
         ImageView imageView_right = (ImageView) findViewById(R.id.imageView1);
         //imageView_right.setDrawingCacheEnabled(true);
         //建立圖片的緩存,圖片的緩存本身就是一個Bitmap
         imageView_right.buildDrawingCache();
         //取得緩存圖片的Bitmap檔
         Bitmap bmp=imageView_right.getDrawingCache();
         //定義一個矩陣圖
         Matrix m=new Matrix();
         //取得圖片的寬度
                int width=bmp.getWidth();
                //取得圖片的長度
                int height=bmp.getHeight();
                //順時針旋轉90度
                m.postRotate(90); 
                //產生新的旋轉後Bitmap檔
                Bitmap b=Bitmap.createBitmap(bmp, 0, 0, width, height, m, true);
                
                //顯示圖片
                imageView_right.setImageBitmap(b);
            
            }  
        };  
        button_right.setOnClickListener(listener_right);
    }   
}


執行畫面



後記:

            旋轉圖片對有用到取得手機內圖片及拍照功能的人應該還蠻需要的

但有一個缺點,就是旋轉必須長寬都一樣時用,如果長和寬是不一樣時,比如說是2:1

會出現一種現象,就是會愈轉愈小-.-",原因是當比較大的長轉到比較小的寬時會因為

放不進去,所以會自動縮小,然後你愈轉它就縮的愈多,所以就會出現愈轉愈小的現象

這是我後來再處理照片時發現的,好了!就為您介紹到這了,感謝。

2 則留言:

  1. 圖片越轉越小這個小BUG目前有辦法解決嗎?
    我把圖檔修成長、寬大小一樣,還是會越轉越小
    因為我想利用圖片旋轉做一個類似羅盤的程式

    回覆刪除
  2. 請問2個java檔案可以合成一起用嗎?一個menu.java,一個rotation.java

    回覆刪除

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