package com.d3.d3xmpp.activites;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import com.d3.d3xmpp.util.Tool;
import com.d3.d3xmpp.util.sreenshot.CropImage;
import com.d3.d3xmpp.util.sreenshot.CropImageView;
import com.d3.d3xmpp.R;
/**
* �ü�����
*
*/
public class CropImageActivity extends Activity implements OnClickListener {
public static boolean isAutoSend = true;
private CropImageView mImageView;
private Bitmap mBitmap;
private CropImage mCrop;
private Button mSave;
private Button mCancel, rotateLeft, rotateRight;
private String mPath = "CropImageActivity";
private String TAG = "";
public int screenWidth = 0;
public int screenHeight = 0;
private ProgressBar mProgressBar;
public static final int SHOW_PROGRESS = 2000;
public static final int REMOVE_PROGRESS = 2001;
private String img_path;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case SHOW_PROGRESS:
mProgressBar.setVisibility(View.VISIBLE);
break;
case REMOVE_PROGRESS:
mHandler.removeMessages(SHOW_PROGRESS);
mProgressBar.setVisibility(View.INVISIBLE);
break;
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gl_modify_avatar);
init();
}
@Override
protected void onStop() {
super.onStop();
if (mBitmap != null) {
mBitmap = null;
}
}
private void init() {
img_path = PicSrcPickerActivity.img_path;
getWindowWH();
mPath = getIntent().getStringExtra("path");
// Log.i(TAG, "�õ���ͼƬ��·���� = " + mPath);
mImageView = (CropImageView) findViewById(R.id.gl_modify_avatar_image);
mSave = (Button) this.findViewById(R.id.gl_modify_avatar_save);
mCancel = (Button) this.findViewById(R.id.gl_modify_avatar_cancel);
rotateLeft = (Button) this
.findViewById(R.id.gl_modify_avatar_rotate_left);
rotateRight = (Button) this
.findViewById(R.id.gl_modify_avatar_rotate_right);
mSave.setOnClickListener(this);
mCancel.setOnClickListener(this);
rotateLeft.setOnClickListener(this);
rotateRight.setOnClickListener(this);
try {
mBitmap = createBitmap(mPath, screenWidth, screenHeight);
if (mBitmap == null) {
Tool.initToast(CropImageActivity.this, "û���ҵ�ͼƬ");
finish();
} else {
resetImageView(mBitmap);
}
} catch (Exception e) {
Tool.initToast(CropImageActivity.this, "û���ҵ�ͼƬ");
finish();
}
addProgressbar();
if (isAutoSend) {
Tool.initToast(CropImageActivity.this, "ͼ������,���Ժ�...");
String path = mCrop.saveToLocal(mBitmap, img_path);
Intent intent = new Intent();
intent.putExtra("path", path);
setResult(RESULT_OK, intent);
finish();
}
}
/**
* ��ȡ��Ļ�ĸߺͿ�
*/
private void getWindowWH() {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
screenWidth = dm.widthPixels;
screenHeight = dm.heightPixels;
}
private void resetImageView(Bitmap b) {
mImageView.clear();
mImageView.setImageBitmap(b);
mImageView.setImageBitmapResetBase(b, true);
mCrop = new CropImage(this, mImageView, mHandler);
mCrop.crop(b);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.gl_modify_avatar_cancel:
// mCrop.cropCancel();
finish();
break;
case R.id.gl_modify_avatar_save:
String path = mCrop.saveToLocal(mCrop.cropAndSave(), img_path);
Intent intent = new Intent();
intent.putExtra("path", path);
setResult(RESULT_OK, intent);
finish();
break;
case R.id.gl_modify_avatar_rotate_left:
mCrop.startRotate(270.f);
break;
case R.id.gl_modify_avatar_rotate_right:
mCrop.startRotate(90.f);
break;
}
}
protected void addProgressbar() {
mProgressBar = new ProgressBar(this);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
addContentView(mProgressBar, params);
mProgressBar.setVisibility(View.INVISIBLE);
}
public Bitmap createBitmap(String path, int w, int h) {
try {
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inJustDecodeBounds = true;
// ���������������Ĺؼ���inJustDecodeBounds��Ϊtrueʱ����ΪͼƬ�����ڴ档
BitmapFactory.decodeFile(path, opts);
int srcWidth = opts.outWidth;// ��ȡͼƬ��ԭʼ���
int srcHeight = opts.outHeight;// ��ȡͼƬԭʼ�߶�
int destWidth = 0;
int destHeight = 0;
// ���ŵı���
double ratio = 0.0;
if (srcWidth < w || srcHeight < h) {
ratio = 0.0;
destWidth = srcWidth;
destHeight = srcHeight;
} else if (srcWidth > srcHeight) {// �������������ź��ͼƬ��С��maxLength�dz������������
ratio = (double) srcWidth / w;
destWidth = w;
destHeight = (int) (srcHeight / ratio);
} else {
ratio = (double) srcHeight / h;
destHeight = h;
destWidth = (int) (srcWidth / ratio);
}
BitmapFactory.Options newOpts = new BitmapFactory.Options();
// ���ŵı����������Ǻ��Ѱ����ı����������ŵģ�Ŀǰ��ֻ����ֻ��ͨ��inSampleSize���������ţ���ֵ�������ŵı�����SDK�н�����ֵ��2��ָ��ֵ
newOpts.inSampleSize = (int) ratio + 2;
// inJustDecodeBounds��Ϊfalse��ʾ��ͼƬ�����ڴ���
newOpts.inJustDecodeBounds = false;
// ���ô�С�����һ���Dz�ȷ�ģ�����inSampleSize��Ϊ���������������ȴ��������
newOpts.outHeight = destHeight;
newOpts.outWidth = destWidth;
// ��ȡ���ź�ͼƬ
return BitmapFactory.decodeFile(path, newOpts);
} catch (Exception e) {
// TODO: handle exception
return null;
}
}
}