将位图保存到android gallery

ryhaxcpt  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(477)

我正在开发一个人脸识别应用程序。它获取了上一个活动的第一个位图,但是它生成了一个新的带有标记的面,我想保存这个新位图。我花了一两天时间才弄明白,但我试过的答案都没用。
这是此活动的代码,它应该在按下savebutton时将位图保存到gallery中。

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, 0, 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, 0,0,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,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);
    }
}

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题