Bonjour,
Enfaite ma question est toute simple ^^ Comment je fais pour afficher une image et la redimensioner avec java en android à partir de son URL que j'ai dans une variable String.
Merci beaucoup !
Bonjour,
Enfaite ma question est toute simple ^^ Comment je fais pour afficher une image et la redimensioner avec java en android à partir de son URL que j'ai dans une variable String.
Merci beaucoup !
J'ai réussi à afficher l'image, il me manque donc plus que le redimensionnement que je ne sais pas faire :s
Voici mon code d'affichage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 try { photo = (ImageView)findViewById(R.id.photoActivite); bitmap = BitmapFactory.decodeStream((InputStream)new URL(urlPhoto).getContent()); photo.setImageBitmap(bitmap); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Bonjour,
Merci de faire une recherche sur le forum
http://www.developpez.net/forums/d11...-taille-image/
Ah effectivement je n'avais pas vu ce post. J'm'en suis donc inspiré pour redimensionner mon image par rapport à la taille de l'écran.
Voici ce que j'ai:
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 private Bitmap resize(Bitmap bm) { //Dimensions de l'image float width = bm.getWidth(); float height = bm.getHeight(); //Dimensions de l'écran float screenWidth = getWindowManager().getDefaultDisplay().getWidth(); float rapport= height/width; Log.d("Patate0", "width: "+width+" height: "+height+" rapport: "+rapport); float newWidth = (float) ((9.0/10.0)*screenWidth); float newHeight = rapport*newWidth; float scaleWidth = newWidth; float scaleHeight = newHeight; //Eviter la pixelisation, on n'augmente pas la taille if(newWidth>width){ newWidth=width; newHeight=height; } Log.d("Patate", "width: "+width+" height: "+height+ " newWidth: "+newWidth+" newHeight: "+newHeight+" rapport: "+rapport); Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, (int)width, (int)height, matrix, true); return resizedBitmap; }
Au niveau de mon logger j'ai ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 //Affichage de la photo try { photo = (ImageView)findViewById(R.id.photoActivite); bitmap = BitmapFactory.decodeStream((InputStream)new URL(urlPhoto).getContent()); bitmap=resize(bitmap); photo.setImageBitmap(bitmap); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Donc la taille du bitmap qui est supérieur à 32bits. Je sais pas pourquoi sachant que la nouvelle taille de l'image est inférieure à l'ancienne...
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
62
63
64
65
66
67
68
69
70 01-10 10:15:26.485: D/Patate0(893): width: 448.0 height: 336.0 rapport: 0.75 01-10 10:15:26.496: D/Patate(893): width: 448.0 height: 336.0 newWidth: 432.0 newHeight: 324.0 rapport: 0.75 01-10 10:15:26.496: D/AndroidRuntime(893): Shutting down VM 01-10 10:15:26.505: W/dalvikvm(893): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 01-10 10:15:26.505: E/AndroidRuntime(893): Uncaught handler: thread main exiting due to uncaught exception 01-10 10:15:26.515: E/AndroidRuntime(893): java.lang.RuntimeException: Unable to start activity ComponentInfo{mpam.base/mpam.base.DetailActActivity}: java.lang.IllegalArgumentException: bitmap size exceeds 32bits 01-10 10:15:26.515: E/AndroidRuntime(893): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.os.Handler.dispatchMessage(Handler.java:99) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.os.Looper.loop(Looper.java:123) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.app.ActivityThread.main(ActivityThread.java:4363) 01-10 10:15:26.515: E/AndroidRuntime(893): at java.lang.reflect.Method.invokeNative(Native Method) 01-10 10:15:26.515: E/AndroidRuntime(893): at java.lang.reflect.Method.invoke(Method.java:521) 01-10 10:15:26.515: E/AndroidRuntime(893): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-10 10:15:26.515: E/AndroidRuntime(893): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-10 10:15:26.515: E/AndroidRuntime(893): at dalvik.system.NativeStart.main(Native Method) 01-10 10:15:26.515: E/AndroidRuntime(893): Caused by: java.lang.IllegalArgumentException: bitmap size exceeds 32bits 01-10 10:15:26.515: E/AndroidRuntime(893): at android.graphics.Bitmap.nativeCreate(Native Method) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.graphics.Bitmap.createBitmap(Bitmap.java:468) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.graphics.Bitmap.createBitmap(Bitmap.java:435) 01-10 10:15:26.515: E/AndroidRuntime(893): at mpam.base.DetailActActivity.resize(DetailActActivity.java:75) 01-10 10:15:26.515: E/AndroidRuntime(893): at mpam.base.DetailActActivity.onCreate(DetailActActivity.java:119) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 01-10 10:15:26.515: E/AndroidRuntime(893): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 01-10 10:15:26.515: E/AndroidRuntime(893): ... 11 more 01-10 10:15:26.548: I/dalvikvm(893): threadid=7: reacting to signal 3 01-10 10:15:26.556: I/dalvikvm(893): Wrote stack trace to '/data/anr/traces.txt' 01-10 10:15:29.066: I/Process(893): Sending signal. PID: 893 SIG: 9 01-10 10:15:29.806: D/dalvikvm(901): GC freed 671 objects / 53184 bytes in 112ms 01-10 10:15:30.216: I/System.out(901): Samedi, 14 Janvier 2012 01-10 10:15:30.216: D/GererActiviteParcoursCtrl(901): Entrée dans la méthode get 01-10 10:15:40.878: D/GererActiviteParcoursCtrl(901): Sortie de la méthode get 01-10 10:15:40.946: D/AndroidRuntime(901): Shutting down VM 01-10 10:15:40.946: W/dalvikvm(901): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 01-10 10:15:40.946: E/AndroidRuntime(901): Uncaught handler: thread main exiting due to uncaught exception 01-10 10:15:40.968: E/AndroidRuntime(901): java.lang.RuntimeException: Unable to start activity ComponentInfo{mpam.base/mpam.base.ActiviteJourneeActivity}: java.lang.IllegalArgumentException: Wrong state class -- expecting View State 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.os.Handler.dispatchMessage(Handler.java:99) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.os.Looper.loop(Looper.java:123) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.ActivityThread.main(ActivityThread.java:4363) 01-10 10:15:40.968: E/AndroidRuntime(901): at java.lang.reflect.Method.invokeNative(Native Method) 01-10 10:15:40.968: E/AndroidRuntime(901): at java.lang.reflect.Method.invoke(Method.java:521) 01-10 10:15:40.968: E/AndroidRuntime(901): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 01-10 10:15:40.968: E/AndroidRuntime(901): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 01-10 10:15:40.968: E/AndroidRuntime(901): at dalvik.system.NativeStart.main(Native Method) 01-10 10:15:40.968: E/AndroidRuntime(901): Caused by: java.lang.IllegalArgumentException: Wrong state class -- expecting View State 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.View.onRestoreInstanceState(View.java:5964) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.widget.TextView.onRestoreInstanceState(TextView.java:2418) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.View.dispatchRestoreInstanceState(View.java:5940) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1127) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1127) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1127) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1127) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1127) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.view.View.restoreHierarchyState(View.java:5919) 01-10 10:15:40.968: E/AndroidRuntime(901): at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:1454) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.Activity.onRestoreInstanceState(Activity.java:835) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.Activity.performRestoreInstanceState(Activity.java:807) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1096) 01-10 10:15:40.968: E/AndroidRuntime(901): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2473) 01-10 10:15:40.968: E/AndroidRuntime(901): ... 11 more 01-10 10:15:40.996: I/dalvikvm(901): threadid=7: reacting to signal 3 01-10 10:15:41.026: I/dalvikvm(901): Wrote stack trace to '/data/anr/traces.txt' 01-10 10:20:41.016: I/Process(901): Sending signal. PID: 901 SIG: 9 01-10 10:20:41.876: D/dalvikvm(907): GC freed 698 objects / 54184 bytes in 105ms
Merci beaucoup, toute aide est la bienvenue ^^
Bonjour,
La fonction postScale veut un coefficient et non la nouvelle valeur, c'est pour cela que tu as un dépassement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 float newWidth = (float) ((9.0/10.0)*screenWidth); float newHeight = rapport*newWidth; float scaleWidth = newWidth; float scaleHeight = newHeight; //Eviter la pixelisation, on n'augmente pas la taille if(newWidth>width){ newWidth=width; newHeight=height; } Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight);
Donc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 float scaleWidth = newWidth / oldwidth; float scaleHeight = newHeight / oldheight;
Ohlalalala. Merci beaucoup !!!!!!!!!!
Partager