【Android】多线程的使用

it2025-01-12  16

 

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 }

 

转载于:https://www.cnblogs.com/taily-laoduan/p/5828831.html

最新回复(0)