将位图保存到 android 画廊

问题描述

我正在开发一款人脸识别应用。它在以前的活动中获得第一个 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 (将#修改为@)