[JAVA] Importer des images d'appareils avec l'application Android

introduction

Je suis fatigué de créer une application qui peut être complétée uniquement avec les paramètres par défaut d'Android Studio, alors je vais essayer d'élargir la gamme d'applications en permettant à diverses images d'être modifiées à l'aide d'OpenCV. Capturez d'abord l'image pour la modifier à partir de l'appareil.

environnement

OpenCV 4.1.2 AndroidStudio 3.4.1

Capturez des images

Cliquez ici pour accéder aux Documents officiels

Tout d'abord, écrivez le code de base de manière appropriée. Je n'ai toujours pas l'habitude de créer des écrans de mise en page avec une interface graphique, alors j'écris en xml.

MainActivity.java


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    
    Button btn_import;
    ImageView img_picture;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn_import = findViewById(R.id.btn_import);
        img_picture = findViewById(R.id.img_picture);
    }

    @Override
    protected void onStart() {
        super.onStart();
        btn_import.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Écrivez le processus pour capturer l'image ici
            }
        });
    }
}

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_import"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="Import"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        android:layout_marginTop="40dp"
        android:layout_marginStart="40dp"/>

    <ImageView
        android:id="@+id/img_picture"
        android:layout_width="320dp"
        android:layout_height="500dp"
        app:layout_constraintTop_toBottomOf="@id/btn_import"
        app:layout_constraintStart_toStartOf="@id/btn_import"/>

</android.support.constraint.ConstraintLayout>

En tant que méthode d'importation, c'est OK si vous utilisez l'une des deux intentions suivantes.

~~ Il a été écrit que CREATE est recommandé lors de la création d'applications d'édition de photos, alors utilisez ʻACTION_CREATE_DOCUMENT ~~ ʻACTION_OPEN_DOCUMENT était plus approprié si vous venez de le modifier sur place sans le sauvegarder.

Mettre en œuvre le traitement des importations

Extrait uniquement pour la partie OnClick

MainActivity.java


public void onClick(View v) {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("image/*");
    startActivityForResult(intent, READ_REQUEST_CODE);  //READ_REQUSET_CODE = 42
}

Maintenant, lorsque vous appuyez sur le bouton, le sélecteur se lance et vous pouvez sélectionner une image. Lorsque vous sélectionnez une image, ʻonActivityResult () est appelé. Vous pouvez obtenir l'URI pour faire référence à l'image dans ce ʻonActivityResult () . Cette fois, récupérez le bitmap de l'URI et affichez l'image.

MainActivity.java


@Override
public void onActivityResult(int requestCode, int resultCode,
                             Intent resultData) {
    if (requestCode == READ_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
        Uri uri = null;
        if (resultData != null) {
            uri = resultData.getData();//URI des données d'image
            try {
                Bitmap bmp = getBitmapFromUri(uri);
                img_picture.setImageBitmap(bmp);
            }catch(IOException e){
                //TODO:Gestion des exceptions
            }
        }
    }
}

//Détourné du document officiel tel qu'il est
private Bitmap getBitmapFromUri(Uri uri) throws IOException {
    ParcelFileDescriptor parcelFileDescriptor =
            getContentResolver().openFileDescriptor(uri, "r");
    FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();
    Bitmap image = BitmapFactory.decodeFileDescriptor(fileDescriptor);
    parcelFileDescriptor.close();
    return image;
}

fin

Vous pouvez maintenant appuyer sur le bouton, sélectionner l'image de l'unité principale et l'afficher. Ensuite, j'aimerais jouer avec cette image capturée avec OpenCV.

Recommended Posts

Importer des images d'appareils avec l'application Android
Faire vibrer le bracelet avec Bluetooth à partir de l'application Android
Application de reconnaissance faciale avec OpenCV + Android Studio
J'ai créé une application Janken avec Android
Application météo Android
[Android] Histoire désespérée avec UserId et SharedUserId de l'application
Compatible avec Android 10 (API 29)
Importer JSON avec SolrJ
Importation CSV avec BOM
Analyseur de spectre d'application Android
[Android] Téléchargement d'images du terminal vers le serveur
Importer des documents avec SolrJ
À propos des composants de l'application Android
Application Android qui sélectionne et affiche des images de la galerie
Comment créer une application à l'aide de Tensorflow avec Android Studio
Lancement du développement personnel de l'application Android
Développement d'applications ROS sur Android
Décompilation de l'application Android ⇒ correction ⇒ recompilation
Créez une application Android. (Jour 5)