package com.jarlen.picturetest;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.provider.MediaStore.MediaColumns;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.jarlen.temptest.FrameFilterActivity;
import com.jarlen.utils.Constants;
import com.js.photosdk.operate.OperateUtils;
import com.js.photosdk.utils.FileUtils;
public class MainActivity extends Activity implements OnClickListener
{
private LinearLayout content_layout;
private Button addPictureFromPhotoBtn;
private Button addPictureFromCameraBtn;
private ImageView pictureShow;
private Button testBtn;
private Class<?> intentClass;
private int intentType = 0;
/* 用来标识请求照相功能的activity */
private static final int CAMERA_WITH_DATA = 3023;
/* 用来标识请求gallery的activity */
private static final int PHOTO_PICKED_WITH_DATA = 3021;
/* 边框 */
private static final int PHOTO_FRAME_WITH_DATA = 3024;
/* 马赛克 */
private static final int PHOTO_MOSAIC_WITH_DATA = 3025;
/* 涂鸦 */
private static final int PHOTO_DRAW_WITH_DATA = 3026;
/* 剪切 */
private static final int PHOTO_CROP_WITH_DATA = 3027;
/* 滤镜 */
private static final int PHOTO_FILTER_WITH_DATA = 3028;
/* 增强 */
private static final int PHOTO_ENHANCE_WITH_DATA = 3029;
/* 旋转 */
private static final int PHOTO_REVOLVE_WITH_DATA = 3030;
/* 图像变形 */
private static final int PHOTO_WARP_WITH_DATA = 3031;
/* 添加水印图片 */
private static final int PHOTO_ADD_WATERMARK_DATA = 3032;
/* 添加文字 */
private static final int PHOTO_ADD_TEXT_DATA = 3033;
/* 测试接口 */
private static final int PHOTO_TEST_TEXT_DATA = 3034;
/* 照相机拍照得到的图片 */
private File mCurrentPhotoFile;
private String photoPath = null, tempPhotoPath, camera_path;
private int scale = 2;
int width = 0;
OperateUtils operateUtils;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
width = metric.widthPixels; // 屏幕宽度(像素)
pictureShow = (ImageView) findViewById(R.id.pictureShow);
testBtn = (Button) findViewById(R.id.testBtn);
testBtn.setOnClickListener(this);
content_layout = (LinearLayout) findViewById(R.id.mainLayout);
addPictureFromPhotoBtn = (Button) findViewById(R.id.addPictureFromPhoto);
addPictureFromPhotoBtn.setOnClickListener(this);
addPictureFromCameraBtn = (Button) findViewById(R.id.addPictureFromCamera);
addPictureFromCameraBtn.setOnClickListener(this);
operateUtils = new OperateUtils(this);
}
@Override
public void onClick(View view)
{
switch (view.getId())
{
case R.id.addPictureFromCamera :
getPictureFormCamera();
break;
case R.id.addPictureFromPhoto :
getPictureFromPhoto();
break;
case R.id.testBtn :
if (photoPath == null)
{
Toast.makeText(MainActivity.this, "请选择图片",
Toast.LENGTH_SHORT).show();
return;
}
if (intentClass == null)
{
Toast.makeText(MainActivity.this, "请图片操作类型",
Toast.LENGTH_SHORT).show();
return;
}
// 将图片路径photoPath传到所要调试的模块
Intent photoFrameIntent = new Intent(MainActivity.this,
intentClass);
photoFrameIntent.putExtra("camera_path", camera_path);
MainActivity.this.startActivityForResult(photoFrameIntent,
intentType);
break;
default :
break;
}
}
/* 从相册中获取照片 */
private void getPictureFromPhoto()
{
Intent openphotoIntent = new Intent(Intent.ACTION_PICK);
openphotoIntent.setType("image/*");
startActivityForResult(openphotoIntent, PHOTO_PICKED_WITH_DATA);
}
/* 从相机中获取照片 */
private void getPictureFormCamera()
{
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
tempPhotoPath = FileUtils.DCIMCamera_PATH + FileUtils.getNewFileName()
+ ".jpg";
mCurrentPhotoFile = new File(tempPhotoPath);
if (!mCurrentPhotoFile.exists())
{
try
{
mCurrentPhotoFile.createNewFile();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
intent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(mCurrentPhotoFile));
startActivityForResult(intent, CAMERA_WITH_DATA);
}
private void compressed()
{
Bitmap resizeBmp = operateUtils.compressionFiller(photoPath,
content_layout);
pictureShow.setImageBitmap(resizeBmp);
camera_path = SaveBitmap(resizeBmp, "saveTemp");
}
final Handler myHandler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
if (msg.what == 1)
{
if (content_layout.getWidth() != 0)
{
Log.i("LinearLayoutW", content_layout.getWidth() + "");
Log.i("LinearLayoutH", content_layout.getHeight() + "");
// 取消定时器
timer.cancel();
compressed();
}
}
}
};
Timer timer = new Timer();
TimerTask task = new TimerTask()
{
public void run()
{
Message message = new Message();
message.what = 1;
myHandler.sendMessage(message);
}
};
// 将生成的图片保存到内存中
public String SaveBitmap(Bitmap bitmap, String name)
{
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED))
{
File dir = new File(Constants.filePath);
if (!dir.exists())
dir.mkdir();
File file = new File(Constants.filePath + name + ".jpg");
FileOutputStream out;
try
{
out = new FileOutputStream(file);
if (bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out))
{
out.flush();
out.close();
}
return file.getAbsolutePath();
} catch (IOException e)
{
e.printStackTrace();
}
}
return null;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (resultCode != RESULT_OK)
{
return;
}
switch (requestCode)
{
case CAMERA_WITH_DATA :
photoPath = tempPhotoPath;
if (content_layout.getWidth() == 0)
{
timer.schedule(task, 10, 1000);
} else
{
compressed();
}
break;
case PHOTO_PICKED_WITH_DATA :
Uri originalUri = data.getData();
//Log.i("jarlen", "originalUri = "+originalUri);
String[] filePathColumn = {MediaColumns.DATA};
Cursor cursor = MainActivity.this.getContentResolver().query(
originalUri, filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
photoPath = cursor.getString(columnIndex);
// 延迟每次延迟10 毫秒 隔1秒执行一次
if (content_layout.getWidth() == 0)
{
timer.schedule(task, 10, 1000);
} else
{
compressed();
}
break;
case PHOTO_FRAME_WITH_DATA :
case PHOTO_MOSAIC_WITH_DATA:
case PHOTO_DRAW_WITH_DATA:
case PHOTO_CROP_WITH_DATA:
case PHOTO_FILTER_WITH_DATA:
case PHOTO_ENHANCE_WITH_DATA:
case PHOTO_REVOLVE_WITH_DATA:
case PHOTO_WARP_WITH_DATA:
case PHOTO_ADD_WATERMARK_DATA:
case PHOTO_ADD_TEXT_DATA:
case PHOTO_TEST_TEXT_DATA:
String resultPath = data.getStringExtra("camera_path");
Bitmap resultBitmap = BitmapFactory.decodeFile(resultPath);
pictureShow.setImageBitmap(resultBitmap);
break;
default :
break;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 1, 1, "滤镜");
menu.add(0, 2, 2, "人体变形");
menu.add(0, 3, 3, "边框");
menu.add(0, 4, 4, "涂鸦");
menu.add(0, 5, 5, "马赛克");
menu.add(0, 6, 6, "剪切");
menu.add(0, 7, 7, "添加水印");
menu.add(0, 8, 9, "图像增强");
menu.add(0, 9, 10, "旋转");
menu.add(0, 10, 8, "添加文字");
menu.add(0, 11, 11, "测试");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
if (photoPath == null)
{
Toast.makeText(MainActivity.this, "请选择图片", Toast.LENGTH_SHORT)
.show();
return true;
}
switch (item.getItemId())
{
case 1 :
intentClass = ImageFilterActivity.class;
intentType = PHOTO_FILTER_WITH_DATA;
break;
case 2 :
intentClass = WarpActivity.class;
intentType = PHOTO_WARP_WITH_DATA;
break;
case 3 :
intentClass = PhotoFrameActivity.class;
intentType = PHOTO_FRAME_WITH_DATA;
break;
case 4 :
intentClass = DrawBaseActivity.class;
intentType = PHOTO_DRAW_WITH_DATA;
break;
case 5 :
intentClass = MosaicActivity.class;
intentType = PHOTO_MOSAIC_WITH_DATA;
break;
case 6 :
intentClass = ImageCropActivity.class;
intentType = PHOTO_CROP_WITH_DATA;
break;
case 7 :
intentClass = AddWatermarkActivity.class;
intentType = PHOTO_ADD_WATERMARK_DATA;
break;
case 8 :
intentClass = EnhanceActivity.class;
intentType = PHOTO_ENHANCE_WITH_DATA;
break;
case 9 :
intentClass = RevolveActivity.class;
intentType = PHOTO_REVOLVE_WITH_DATA;
break;
case 10:
intentClass = AddTextActivity.class;
intentType = PHOTO_ADD_TEXT_DATA;
break;
default :
intentClass = FrameFilterActivity.class;
intentType = PHOTO_TEST_TEXT_DATA;
break;
}
Toast.makeText(MainActivity.this, "请点击测试按钮", Toast.LENGTH_SHORT).show();
return super.onOptionsItemSelected(item);
}
}