J'ai un souci d'affichage de mon textView. Voici mon code :
La fonction displayImg est lancée lors de l'appui sur un bouton.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 package pi12.vr.myapplication; import android.graphics.Bitmap; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import java.io.IOException; import static org.opencv.imgcodecs.Imgcodecs.imwrite; public class MainActivity extends AppCompatActivity { ImageView iv; EditText et1; EditText et2; TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.imgv_image); et1 = (EditText) findViewById(R.id.threshold1); et2 = (EditText) findViewById(R.id.threshold2); tv = (TextView) findViewById(R.id.txtv_charg); if (!OpenCVLoader.initDebug()) { Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working."); } else { Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working."); } } public void displayImg(View view){ try { tv.setText("Travail en cours ..."); while(!tv.getText().toString().equals("Travail en cours ...")); Mat image = Utils.loadResource(getApplicationContext(),R.drawable.img_1); Mat image2 = new Mat(); Imgproc.bilateralFilter(image, image2, 50, Double.valueOf(et1.getText().toString()), Double.valueOf(et2.getText().toString())); Bitmap bitmap = Bitmap.createBitmap(image2.cols(),image2.rows(),Bitmap.Config.ARGB_8888); Utils.matToBitmap(image2, bitmap); iv.setImageBitmap(bitmap); tv.setText("image affichée"); } catch (IOException e) { e.printStackTrace(); } } }
Le texte "travail en cours ..." ne s'affiche jamais, alors que le texte "image affichée" oui.
Je pense que le souci vient de la pompe à événements. Je m'explique, je pense que la ligne Imgproc.bilateralFilter(...) utilise le processeur à fond et que pendant ce temps la pompe ne met pas à jour l'interface graphique. Puis lorsque le traitement est fini la pompe à événements reprends la main et l'affiche pendant une fraction de seconde avant de le remplacer par "image affichée" (voir ne l'affiche pas du tout car sait qu'il faut déjà le remplacer).
D'où mes questions :
1) est-ce bien cela qui empêche l'affichage ?
2) a) Si oui, comment je force la mise à jour de l'affichage avant l’exécution de la ligne problématique ?
2) b) Si non, Qu'es-ce qui empêche l'affichage du texte ?
Partager