[JAVA] Importieren Sie Gerätebilder mit der Android App

Einführung

Ich bin es leid, eine App zu erstellen, die nur mit den Standardeinstellungen von Android Studio fertiggestellt werden kann. Daher werde ich versuchen, die Palette der Apps zu erweitern, indem verschiedene Bilder mit OpenCV bearbeitet werden können. Nehmen Sie zuerst das Bild zur Bearbeitung vom Gerät auf.

Umgebung

OpenCV 4.1.2 AndroidStudio 3.4.1

Bilder aufnehmen

Klicken Sie hier für Offizielle Dokumente

Schreiben Sie zunächst den Basiscode entsprechend. Ich bin es immer noch nicht gewohnt, Layout-Bildschirme mit GUI zu erstellen, also schreibe ich in 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) {
                //Schreiben Sie hier den Prozess zum Erfassen des Bildes
            }
        });
    }
}

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>

Als Importmethode ist es in Ordnung, wenn Sie eine der beiden folgenden Absichten verwenden.

~~ Es wurde geschrieben, dass CREATE beim Erstellen von Fotobearbeitungs-Apps empfohlen wird. Verwenden Sie daher ACTION_CREATE_DOCUMENT ~~ ACTION_OPEN_DOCUMENT war besser geeignet, wenn Sie es nur vor Ort bearbeitet haben, ohne es zu speichern.

Implementieren Sie die Importverarbeitung

Auszug nur für den OnClick-Teil

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
}

Wenn Sie nun die Taste drücken, wird die Auswahl gestartet und Sie können ein Bild auswählen. Wenn Sie ein Bild auswählen, wird "onActivityResult ()" aufgerufen. Sie können den URI veranlassen, auf das Bild in diesem onActivityResult () zu verweisen. Holen Sie sich diesmal die Bitmap aus dem URI und zeigen Sie das Bild an.

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();//Bilddaten uri
            try {
                Bitmap bmp = getBitmapFromUri(uri);
                img_picture.setImageBitmap(bmp);
            }catch(IOException e){
                //TODO:Ausnahmebehandlung
            }
        }
    }
}

//Vom offiziellen Doc abgelenkt, wie es ist
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;
}

Ende

Jetzt können Sie die Taste drücken, das Bild vom Hauptgerät auswählen und anzeigen. Als nächstes möchte ich mit diesem aufgenommenen Bild mit OpenCV herumspielen.

Recommended Posts

Importieren Sie Gerätebilder mit der Android App
Lassen Sie das Armbandgerät mit Bluetooth über die Android-App vibrieren
Gesichtserkennungs-App mit OpenCV + Android Studio
Ich habe eine Janken App mit Android gemacht
Android Wetter App
[Android] Verzweifelte Geschichte mit UserId und SharedUserId der App
Kompatibel mit Android 10 (API 29)
Importieren Sie JSON mit SolrJ
CSV-Import mit Stückliste
Android App Spectrum Analyzer
[Android] Hochladen von Bildern vom Terminal auf den Server
Importieren Sie Dokumente mit SolrJ
Informationen zu Android-App-Komponenten
Android App, die Bilder aus der Galerie auswählt und anzeigt
So erstellen Sie eine App mit Tensorflow mit Android Studio
Startschuss für die persönliche Entwicklung der Android-App
ROS App Entwicklung auf Android
Android App dekompilieren ⇒ korrigieren ⇒ neu kompilieren
Erstelle eine Android App. (Tag 5)