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