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.
OpenCV 4.1.2 AndroidStudio 3.4.1
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.
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;
}
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