问题描述
我正在开发一款人脸识别应用。它在以前的活动中获得第一个 bitman,但它会生成一个带有标记的新人脸,我想保存该新位图。我已经失去了一两天的时间来弄清楚,但我尝试过的答案都没有帮助。
这是此活动的代码,它应该在按下 saveButton 时将位图保存到图库中。
public class FaceRecognizeActivity extends AppCompatActivity {
Bitmap bmp,carasReconocidas;
ImageView imagen;
int contador;
Button guardarRostro,copiarRegistroRostro;
TextView descripcion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getwindow().setStatusBarColor(this.getResources().getColor(R.color.colorAccentLight));
setContentView(R.layout.activity_reconocer_rostros);
guardarRostro = (Button) findViewById(R.id.guardarRostros);
copiarRegistroRostro = (Button) findViewById(R.id.copiarRostros);
descripcion = (TextView) findViewById(R.id.descripcionRostros);
byte[] byteArray = getIntent().getByteArrayExtra("image");
bmp = BitmapFactory.decodeByteArray(byteArray,byteArray.length);
this.imagen = (ImageView) this.findViewById(R.id.caraReconocida);
imagen.setimageBitmap(bmp);
contador = 0;
final Paint BoxPaint = new Paint();
carasReconocidas = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(),Bitmap.Config.RGB_565);
final Canvas canvas = new Canvas (carasReconocidas);
canvas.drawBitmap(bmp,null);
BoxPaint.setstrokeWidth(8);
BoxPaint.setColor(Color.GREEN);
BoxPaint.setStyle(Paint.Style.stroke);
procesar( canvas,BoxPaint);
descripcion.setText(cantidad());
guardarRostro.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Todo
}
})
;
copiarRegistroRostro.setonClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("Registro de rostros ",descripcion.getText().toString());
clipboard.setPrimaryClip(clip);
Toast.makeText(getApplicationContext(),"copiado",Toast.LENGTH_SHORT).show();
}
})
;
}
public void procesar(Canvas canvas,Paint BoxPaint){
FaceDetector faceDetector = new FaceDetector.Builder(getApplicationContext())
.setTrackingEnabled(false)
.setLandmarkType(FaceDetector.ALL_LANDMARKS)
.setMode(FaceDetector.FAST_MODE)
.build();
if (!faceDetector.isOperational()){
Toast.makeText(getApplicationContext(),"Algo salió mal",Toast.LENGTH_SHORT).show();
return;
}
Frame frame = new Frame.Builder().setBitmap(bmp).build();
SparseArray<Face> sparseArray = faceDetector.detect(frame);
for (int i = 0 ; i < sparseArray.size(); i++){
Face face = sparseArray.valueAt(i);
float x1= face.getPosition().x;
float y1= face.getPosition().y;
float x2= x1 + face.getWidth();
float y2= y1 + face.getHeight();
RectF rectF = new RectF(x1,y1,x2,y2);
canvas.drawRoundRect(rectF,2,BoxPaint);
contador=contador + 1;
}
imagen.setimageBitmap(carasReconocidas);
}
public String cantidad(){
String texto;
if (contador == 0){
texto= "Parece que no hay personas en esta imagen.";
} else if (contador == 1) {
texto="Se reconoció una persona";
}else {
texto="Se reconocieron " + Integer.toString(contador) + " personas.";
}
return texto;
}
@Override
public void onBackpressed() {
Intent anotherIntent = new Intent(FaceRecognizeActivity.this,MenuActivity.class);
startActivity(anotherIntent);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)