Android 圖片的讀取 縮放 保存
注意AndroidManifest配置權限:(在SD卡寫入數據)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
代碼:
從另一個Activity 上傳入byte型的數據,通過 bmp = BitmapFactory.decodeByteArray(txInfo, 0, txInfo.length);生成位圖。
然后有用到ZoomControls圖片縮放,最后可以保存圖片到sd卡。
package com.login.main;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ZoomControls;
public class List_tx extends Activity {
private ImageView imageView1;
private ZoomControls zoom;
private Button saveButton;
private float scaleWidth = 1;
private float scaleHeight = 1;
private Bitmap bmp;
private int zooms = 0;
private ProgressDialog m_Dialog = null;
private Handler handler = new Handler();
private String xh = "";
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.list_tx);
Bundle b = this.getIntent().getExtras();
byte[] txInfo = b.getByteArray("txInfo");
xh = b.getString("xh");
saveButton = (Button) findViewById(R.id.saveButton);
saveButton.setOnClickListener(saveClick);
imageView1 = (ImageView) findViewById(R.id.imageView1);
bmp = BitmapFactory.decodeByteArray(txInfo, 0, txInfo.length);// 生成位圖
imageView1.setImageBitmap(bmp);
zoom = (ZoomControls) findViewById(R.id.zoomcontrol);
zoom.setIsZoomInEnabled(true);
zoom.setIsZoomOutEnabled(true);
// 圖片放大
zoom.setOnZoomInClickListener(new OnClickListener() {
public void onClick(View v) {
zoom.setIsZoomOutEnabled(true);
int bmpWidth = bmp.getWidth();
int bmpHeight = bmp.getHeight();
// 設置圖片放大但比例
double scale = 1.25;
// 計算這次要放大的比例
if (zooms >= -3 && zooms < 6) {
scaleWidth = (float) (scaleWidth * scale);
scaleHeight = (float) (scaleHeight * scale);
// 產生新的大小但Bitmap對象
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth,
bmpHeight, matrix, true);
imageView1.setImageBitmap(resizeBmp);
zooms++;
} else
zoom.setIsZoomInEnabled(false);
}
});
// 圖片減小
zoom.setOnZoomOutClickListener(new OnClickListener() {
public void onClick(View v) {
zoom.setIsZoomInEnabled(true);
int bmpWidth = bmp.getWidth();
int bmpHeight = bmp.getHeight();
// 設置圖片放大但比例
double scale = 0.8;
// 計算這次要放大的比例
if (zooms > -3 && zooms <= 6) {
scaleWidth = (float) (scaleWidth * scale);
scaleHeight = (float) (scaleHeight * scale);
// 產生新的大小但Bitmap對象
Matrix matrix = new Matrix();
matrix.postScale(scaleWidth, scaleHeight);
Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth,
bmpHeight, matrix, true);
imageView1.setImageBitmap(resizeBmp);
zooms--;
} else
zoom.setIsZoomOutEnabled(false);
}
});
}
// 保存
OnClickListener saveClick = new OnClickListener() {
public void onClick(final View v) {
m_Dialog = ProgressDialog.show(List_tx.this, "請稍后...", "圖像保存中...",
true);
new Thread(new Runnable() {
public void run() {
File file = new File("/sdcard/" + xh + ".jpeg");
try {
FileOutputStream out = new FileOutputStream(file);
if (bmp.compress(Bitmap.CompressFormat.JPEG, 100, out)) {
out.flush();
out.close();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("FileNotFoundException");
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("FileNotFoundException");
e.printStackTrace();
}
// 更新界面
handler.post(new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),
"頭像保存在" + "/sdcard/" + xh + ".jpeg",
Toast.LENGTH_SHORT).show();
}
});
m_Dialog.dismiss();
}
}).start();
}
};
} 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!