【Android】多线程的使用

 

  1 package com.faceplusplus.apitest;
  2 
  3 import com.faceplusplus.api.FaceDetecter;
  4 import com.faceplusplus.api.FaceDetecter.Face;
  5 import com.facepp.error.FaceppParseException;
  6 import com.facepp.http.HttpRequests;
  7 import com.facepp.http.PostParameters;
  8 import com.megvii.apitest.R;
  9 
 10 import android.app.Activity;
 11 import android.content.Intent;
 12 import android.database.Cursor;
 13 import android.graphics.Bitmap;
 14 import android.graphics.BitmapFactory;
 15 import android.graphics.Canvas;
 16 import android.graphics.Paint;
 17 import android.graphics.RectF;
 18 import android.net.Uri;
 19 import android.os.Bundle;
 20 import android.os.Handler;
 21 import android.os.HandlerThread;
 22 import android.provider.MediaStore;
 23 import android.view.View;
 24 import android.widget.Button;
 25 import android.widget.ImageView;
 26 import android.widget.Toast;
 27 
 28 public class MainActivity extends Activity {
 29 
 30     private Bitmap curBitmap;
 31     private final static int REQUEST_GET_PHOTO = 1;
 32     ImageView imageView = null;
 33     HandlerThread detectThread = null;
 34     Handler detectHandler = null;
 35     Button button = null;
 36     FaceDetecter detecter = null;
 37     HttpRequests request = null;// 在线api
 38 
 39     @Override
 40     protected void onCreate(Bundle savedInstanceState) {
 41         super.onCreate(savedInstanceState);
 42         setContentView(R.layout.activity_main);
 43         detectThread = new HandlerThread("detect");
 44         detectThread.start();
 45         detectHandler = new Handler(detectThread.getLooper());
 46 
 47         imageView = (ImageView) findViewById(R.id.imageview);
 48         curBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.temp4);
 49         imageView.setImageBitmap(curBitmap);
 50         detecter = new FaceDetecter();
 51         detecter.init(this, "cbf408f2a3982fd0b54ab1ddacd682fa");
 52         
 53         
 54         //FIXME 替换成申请的key
 55         request = new HttpRequests("cbf408f2a3982fd0b54ab1ddacd682fa", "Ck9lv8ynuq7VLQYgQvxXXSzJJdxyfBMk");
 56     }
 57 
 58     @Override
 59     protected void onDestroy() {
 60         super.onDestroy();
 61         detecter.release(this);// 释放引擎
 62     }
 63 
 64     public static Bitmap getFaceInfoBitmap(Face[] faceinfos,
 65             Bitmap oribitmap) {
 66         Bitmap tmp;
 67         tmp = oribitmap.copy(Bitmap.Config.ARGB_8888, true);
 68 
 69         Canvas localCanvas = new Canvas(tmp);
 70         Paint localPaint = new Paint();
 71         localPaint.setColor(0xffff0000);
 72         localPaint.setStyle(Paint.Style.STROKE);
 73         for (Face localFaceInfo : faceinfos) {
 74             RectF rect = new RectF(oribitmap.getWidth() * localFaceInfo.left, oribitmap.getHeight()
 75                     * localFaceInfo.top, oribitmap.getWidth() * localFaceInfo.right,
 76                     oribitmap.getHeight()
 77                             * localFaceInfo.bottom);
 78             localCanvas.drawRect(rect, localPaint);
 79         }
 80         return tmp;
 81     }
 82 
 83     public static Bitmap getScaledBitmap(String fileName, int dstWidth)
 84     {
 85         BitmapFactory.Options localOptions = new BitmapFactory.Options();
 86         localOptions.inJustDecodeBounds = true;
 87         BitmapFactory.decodeFile(fileName, localOptions);
 88         int originWidth = localOptions.outWidth;
 89         int originHeight = localOptions.outHeight;
 90 
 91         localOptions.inSampleSize = originWidth > originHeight ? originWidth / dstWidth
 92                 : originHeight / dstWidth;
 93         localOptions.inJustDecodeBounds = false;
 94         return BitmapFactory.decodeFile(fileName, localOptions);
 95     }
 96 
 97     public void onClick(View view) {
 98         switch (view.getId())
 99         {
100             case R.id.pick:
101                 startActivityForResult(new Intent("android.intent.action.PICK",
102                         MediaStore.Images.Media.EXTERNAL_CONTENT_URI), REQUEST_GET_PHOTO);
103                 break;
104             case R.id.detect:
105                 detectHandler.post(new Runnable() {
106 
107                     @Override
108                     public void run() {
109                         Face[] faceinfo = detecter.findFaces(curBitmap);// 进行人脸检测
110                         if (faceinfo == null)
111                         {
112                             runOnUiThread(new Runnable() {
113 
114                                 @Override
115                                 public void run() {
116                                     Toast.makeText(MainActivity.this, "未发现人脸信息", Toast.LENGTH_LONG).show();
117                                 }
118                             });
119                             return;
120                         }
121                         
122                         //在线api交互
123                         try {
124                             request.offlineDetect(detecter.getImageByteArray(),detecter.getResultJsonString(), new PostParameters());
125                         } catch (FaceppParseException e) {
126                             // TODO 自动生成的 catch 块
127                             e.printStackTrace();
128                         }
129                         final Bitmap bit = getFaceInfoBitmap(faceinfo, curBitmap);
130                         runOnUiThread(new Runnable() {
131 
132                             @Override
133                             public void run() {
134                                 imageView.setImageBitmap(bit);
135                                 System.gc();
136                             }
137                         });
138                     }
139                 });
140         }
141     }
142 
143     @Override
144     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
145         // TODO Auto-generated method stub
146         if (resultCode == RESULT_OK) {
147             switch (requestCode) {
148                 case REQUEST_GET_PHOTO: {
149                     if (data != null) {
150                         final String str;
151                         Uri localUri = data.getData();
152                         String[] arrayOfString = new String[1];
153                         arrayOfString[0] = "_data";
154                         Cursor localCursor = getContentResolver().query(localUri,
155                                 arrayOfString, null, null, null);
156                         if (localCursor == null)
157                             return;
158                         localCursor.moveToFirst();
159                         str = localCursor.getString(localCursor
160                                 .getColumnIndex(arrayOfString[0]));
161                         localCursor.close();
162                         if ((curBitmap != null) && (!curBitmap.isRecycled()))
163                             curBitmap.recycle();
164                         curBitmap = getScaledBitmap(str, 600);
165                         imageView.setImageBitmap(curBitmap);
166                     }
167                     break;
168                 }
169             }
170 
171         }
172     }
173 }

 

posted @ 2016-09-01 10:42  Taily_老段  阅读(243)  评论(0编辑  收藏  举报