用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - android代码库

how old app

2015-07-27 作者: 锋客举报

[android]代码库

特别注明:程序来自慕课学院
======================================
package com.example.fengke_how_old;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
import com.facepp.error.FaceppParseException;
 
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.support.v7.app.ActionBarActivity;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
 
 
public class MainActivity extends ActionBarActivity implements OnClickListener {
     
    private static final int PICK_CODE= 0X110;
    private ImageView mPhoto;
    private Button mGetImage;
    private Button mDelect;
    private TextView mTip;
    private View mWaitting;
    private String  mCurrentPhotoStr;
    private Bitmap mPhotoImg;
    private Paint mPaint;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        inintViews();
        inintEvents();
        mPaint=new Paint();
         
          
    }
     
    private void inintEvents(){
         mGetImage.setOnClickListener(this);
         mDelect.setOnClickListener(this);
         
    }
     
    private void inintViews()
    {
        mPhoto=(ImageView)findViewById(R.id.id_photo);
        mGetImage=(Button)findViewById(R.id.id_getImage);
        mDelect=(Button)findViewById(R.id.id_detect);
        mTip=(TextView)findViewById(R.id.id_tip);
        mWaitting=findViewById(R.id.id_waiting);
    }
     
    public void onClick(View v){
         
        switch(v.getId()){
            case R.id.id_getImage:
                  
            Intent intent=new Intent(Intent.ACTION_PICK);
            intent.setType("image/*");
            startActivityForResult(intent, PICK_CODE);
            break;
             
            case R.id.id_detect:
                 
                mWaitting.setVisibility(View.VISIBLE);
                 
                if(mCurrentPhotoStr!=null&&!mCurrentPhotoStr.trim().equals("")){
                    resizePhoto();
                }else{
                    mPhotoImg=BitmapFactory.decodeResource(getResources(), R.drawable.image);
                     
                }
                 
                FaceppDetect.detect(mPhotoImg, new FaceppDetect.CallBack() {
                     
                    @Override
                    public void success(JSONObject result) {
                        Message msg=Message.obtain();
                        msg.what=MSG_SUCCESS;
                        msg.obj=result;
                        mHandler.sendMessage(msg);
                        // TODO Auto-generated method stub
                         
                    }
                     
                    @Override
                    public void error(FaceppParseException exception) {
                         
                        Message msg=Message.obtain();
                        msg.what=MSG_ERROR;
                        msg.obj=exception.getErrorMessage();
                        mHandler.sendMessage(msg);
                        // TODO Auto-generated method stub
                         
                    }
                });
            break;
             
             
        }
         
         
         
    }
     
  protected void  onActivityResult(int requestCode,int resultCode ,Intent intent){
       
      if(requestCode==PICK_CODE){
          if(intent!=null){
              Uri uri=intent.getData();
              Cursor cursor=getContentResolver().query(uri, null, null, null, null);
              cursor.moveToFirst();
              int idx=cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
              mCurrentPhotoStr=cursor.getString(idx);
              cursor.close();
               
              //压缩照片
               
              resizePhoto();
              mPhoto.setImageBitmap(mPhotoImg);
              mTip.setText("Click Detect ==>");
              }
      }
      super.onActivityResult(requestCode, requestCode, intent);
  }
 
private void resizePhoto() {
     
    BitmapFactory.Options  options=new BitmapFactory.Options();
    options.inJustDecodeBounds=true;
    BitmapFactory.decodeFile(mCurrentPhotoStr, options);
     
    double ratio=Math.max(options.outWidth*1.0d/1024f, options.outHeight*1.0d/1024f);
     
    options.inSampleSize=(int)Math.ceil(ratio);
     
    options.inJustDecodeBounds=false;
     
    mPhotoImg=BitmapFactory.decodeFile(mCurrentPhotoStr, options);
    // TODO Auto-generated method stub
     
}
 
private static final int MSG_SUCCESS=0x111;
private static final int MSG_ERROR=0x112;
 
private Handler mHandler=new Handler(){
    public void handleMessage(Message msg){
         
        switch(msg.what){
         
        case MSG_SUCCESS:
            mWaitting.setVisibility(View.GONE);
            JSONObject rs=(JSONObject)msg.obj;
            prepareRsBitmap(rs);
            mPhoto.setImageBitmap(mPhotoImg);
             
             
              break;
        case MSG_ERROR:
            mWaitting.setVisibility(View.GONE);
            String errormsg=(String)msg.obj;
            if(TextUtils.isEmpty(errormsg)){
                mTip.setText("Error.");
            }else{
                mTip.setText(errormsg);
            }
             
             
             
            break;
         
        }
        super.handleMessage(msg);
    }
     
};
private void prepareRsBitmap(JSONObject rs) {
     
    Bitmap bitmap=Bitmap.createBitmap(mPhotoImg.getWidth(),mPhotoImg.getHeight(),mPhotoImg.getConfig());
    Canvas canvas=new Canvas(bitmap);
    canvas.drawBitmap(mPhotoImg, 0,0, null);
     
     
    try {
        JSONArray faces=rs.getJSONArray("face");
        int faceCount=faces.length();
        mTip.setText("find" + faceCount);
        for(int i=0;i<faceCount;i++){
            JSONObject face=faces.getJSONObject(i);
            JSONObject posObj=face.getJSONObject("position");
            float x=(float) posObj.getJSONObject("center").getDouble("x");
            float y=(float) posObj.getJSONObject("center").getDouble("y");
            float w=(float) posObj.getDouble("width");
            float h=(float) posObj.getDouble("height");
            x=x/100*bitmap.getWidth();
            y=y/100*bitmap.getHeight();
             
            w=w/100*bitmap.getWidth();
            h=h/100*bitmap.getHeight();
             
            mPaint.setColor(0xffffffff);
            mPaint.setStrokeWidth(3);
             
            //box
             
            canvas.drawLine(x-w/2,y-h/2,x-w/2,y+h/2, mPaint);
            canvas.drawLine(x-w/2,y-h/2,x+w/2,y-h/2, mPaint);
            canvas.drawLine(x+w/2,y-h/2,x+w/2,y+h/2, mPaint);
            canvas.drawLine(x-w/2,y+h/2,x+w/2,y+h/2, mPaint);
             
            int age=face.getJSONObject("attribute").getJSONObject("age").getInt("value");
            String gender=face.getJSONObject("attribute").getJSONObject("gender").getString("value");
             
            Bitmap ageBitmap=buildAgeBitmp(age,"Male".equals(gender));
             
            //缩放年龄图片
            int ageWidth=ageBitmap.getWidth();
            int ageHeight=ageBitmap.getHeight();
             
            if(bitmap.getWidth()<mPhoto.getWidth()&&bitmap.getHeight()<mPhoto.getHeight()){
                 
                float ratio=Math.max(bitmap.getWidth()*1.0f/mPhoto.getWidth(), bitmap.getHeight()*1.0f/mPhoto.getHeight());
                ageBitmap=Bitmap.createScaledBitmap(ageBitmap, (int)(ageWidth*ratio), (int)(ageHeight*ratio), false);
                 
            }
             
            canvas.drawBitmap(ageBitmap, x-ageBitmap.getWidth()/2,y-h/2-ageBitmap.getHeight(),null);
             
            mPhotoImg=bitmap;
        }
         
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
     
     
     
     
     
    // TODO Auto-generated method stub
     
}
 
private Bitmap buildAgeBitmp(int age, boolean isMale) {
    TextView tv=(TextView)mWaitting.findViewById(R.id.id_age_and_gender);
    tv.setText(age+"");
    if(isMale){
        tv.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.male), null, null, null);
         
    }else{
        tv.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.female), null, null, null);
    }
     
    tv.setDrawingCacheEnabled(true);
    Bitmap bitmap=Bitmap.createBitmap(tv.getDrawingCache());
    tv.destroyDrawingCache();
     
    // TODO Auto-generated method stub
    return bitmap;
}
   
   
 
 
}
   =====================================================
package com.example.fengke_how_old;
 
import java.io.ByteArrayOutputStream;
 
import org.json.JSONObject;
 
import android.graphics.Bitmap;
import android.util.Log;
 
import com.facepp.error.FaceppParseException;
import com.facepp.http.HttpRequests;
import com.facepp.http.PostParameters;
 
public class FaceppDetect {
     
     
    public interface CallBack{
        void success(JSONObject result);
        void error (FaceppParseException exception);
         
    }
     
     
    public static void detect(final Bitmap bm,final CallBack callBack){
         
        new Thread( new Runnable(){
 
            @Override
            public void run() {
                 
                     
                         
                        try {
                            HttpRequests  reuqests=new HttpRequests(Constant.KEY, Constant.SECRET, true, true);
                            Bitmap bmSmall=Bitmap.createBitmap(bm,0,0,bm.getWidth(),bm.getHeight());
                            ByteArrayOutputStream stream=new ByteArrayOutputStream();
                            bmSmall.compress(Bitmap.CompressFormat.JPEG, 100, stream);
                            byte[] arrays=stream.toByteArray();
                            PostParameters params=new PostParameters();
                            params.setImg(arrays);
                            JSONObject jsonObject=reuqests.detectionDetect(params);
                            Log.e("TAG", jsonObject.toString());
                            if(callBack!=null){
                                callBack.success(jsonObject);
                            }
                             
                             
                             
                             
                        } catch (FaceppParseException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                            if(callBack!=null){
                                callBack.error(e);
                            }
                        }
                         
                 
                 
            }
             
             
             
             
             
        }).start();
        }
         
    }
 
 
=========================================================
package com.example.fengke_how_old;
 
public class Constant {
     
    public static final String KEY="57dfae64b546253db219e7ed2d409f47";
    public static final String SECRET="3RhWaggYPZ8ZsRYyG_LRxKJZ6q_f8zhF";
 
}
========================================================
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.how_old.MainActivity" >
     
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Get Image"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginRight="10dp"
        android:id="@+id/id_getImage"
         
        />
     
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Detect"
        android:layout_alignParentBottom="true"
        android:layout_marginRight="10dp"
        android:id="@+id/id_detect"
        android:layout_toLeftOf="@id/id_getImage"
         
        />
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/id_tip"
        android:layout_marginLeft="10dp"
        android:layout_alignTop="@id/id_detect"
        android:layout_toLeftOf="@id/id_detect"
        android:gravity="center"
        />
     
    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/id_photo"
        android:layout_above="@id/id_detect"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/image"
         
        />
     
    <FrameLayout
         android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"
        android:clickable="true"
        android:id="@+id/id_waiting"       
        >
      <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
            />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/id_age_and_gender"
        android:drawableLeft="@drawable/male"
        android:text="123"
        
        android:visibility="invisible"
        android:textColor="#fff00fff"
        android:textSize="22sp"
        android:gravity="center"
         
        />       
 
         
    </FrameLayout>
 
</RelativeLayout>
===============================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.fengke_how_old"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
 
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />
 
    <application
        android:allowBackup="true"
        android:icon="@drawable/tubiao"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

[源代码打包下载]




网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...