Hello,
Je veux afficher une image. Je veux définir la taille d'une image en fonction de la taille de l'écran et non pas fonction de sa taille. Comment fait on cela ?
Merci
Hello,
Je veux afficher une image. Je veux définir la taille d'une image en fonction de la taille de l'écran et non pas fonction de sa taille. Comment fait on cela ?
Merci
Bonsoir,
Tu peux redimensionner une image comme ceci :
Et tu peux récupérer les dimensions de l'écran comme cela :
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 private Bitmap resize(Bitmap bm, int w, int h) { int width = bm.getWidth(); int height = bm.getHeight(); int newWidth = w; int newHeight = h; float scaleWidth = ((float) newWidth) / width; float scaleHeight = ((float) newHeight) / height; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, true); return resizedBitmap; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 screenWidth = getWindowManager().getDefaultDisplay().getWidth(); screenHeight = getWindowManager().getDefaultDisplay().getHeight();
Bonjour, une réaction à ton explication Viish:
* Comment fait-on pour redimensionner une image de façon à ce qu'elle remplisse un cercle, et non pas un rectangle?
* j'ai essayé le code ci-dessous à partir d'un exemple, que j'effectue dans une méthode d'initialisation appelée dans le constructeur de ma classe (qui hérite de View):
* Je ne comprends pas ce que fait setScale(...) (Je me doute bien que c'est là qu'on fixe les éléments de la matrice, mais que ce passe t'il?)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 discIntBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.image); discIntMatrix = new Matrix(); discIntMatrix.setScale(1.0f / discIntBitmap.getWidth(),1.0f / discIntBitmap.getHeight()); discIntShader = new BitmapShader(discIntBitmap,Shader.TileMode.MIRROR,Shader.TileMode.MIRROR); discIntShader.setLocalMatrix(discIntMatrix); discIntPaint = new Paint(); discIntPaint.setFilterBitmap(true); discIntPaint.setStyle(Paint.Style.FILL); discIntPaint.setShader(discIntShader);
* Et ensuite j'utilise un canvas pour dessiner le tout via la méthode onDraw():
canvas.drawCircle(center, center, discIntRadius, discIntPaint);
* Si j'ai bien compris, une NullPointExeption est levée dans l'instanciation du Shader (il ne me reconnait pas ma Bitmap ce cochon?). Aurais-tu (si c'est quelqu'un d'autre, je suis preneur aussi hein!) l'explication miracle?
* Y-a-t-il un tutoriel quelque-part dans l'immensité du Web sur la manipulation des Bitmap par des Matrices, et sur l'utilisation en général des matrices, en développement Android?
Merci d'avance pour quelque attention apportée à mon message!
Bonjour,
Euh comme cela je dirais qu'il te suffit de récupérer le rayon de ton cercle pour connaître la largeur de ton rectangle minimum , non ?Comment fait-on pour redimensionner une image de façon à ce qu'elle remplisse un cercle, et non pas un rectangle?
A moins que tu veuille transformer ton image en un cercle.
Le SetScale te permet de définir la nouvelle échelle de ton image à redimensionner en x et y.Je ne comprends pas ce que fait setScale(...) (Je me doute bien que c'est là qu'on fixe les éléments de la matrice, mais que ce passe t'il?)
public void setScale (float sx, float sy)
Since: API Level 1
Set the matrix to scale by sx and sy.
Pourrais tu nous poster ton logcat ?* Si j'ai bien compris, une NullPointExeption est levée dans l'instanciation du Shader (il ne me reconnait pas ma Bitmap ce cochon?). Aurais-tu (si c'est quelqu'un d'autre, je suis preneur aussi hein!) l'explication miracle?
Car si je comprends bien ton message c'est discIntShader qui est null , c'est cela ?
Moi je ne comprend pas tonSi tu regardes mon exemple tu verras que les paramètres que je lui donne sont le ratio entre la taille de ma nouvelle image et la taille de mon ancienne image, alors que toi tu lui donnes la valeur 1 divisé par la taille de ton ancienne image.
Code : Sélectionner tout - Visualiser dans une fenêtre à part discIntMatrix.setScale(1.0f / discIntBitmap.getWidth(),1.0f / discIntBitmap.getHeight());
Bonjour, et merci pour vos réactions:
* Donc il suffit bien d'utiliser canvas.drawCircle(..) avec en paramètre le rectangle minimum ou les centre et rayon? L'image sera directement redimensionnée, sera-t-elle coupée ou déformée? (vu qu'on passe d'une image rectangulaire à une image circulaire)
* setScale: Je suis bien allé voir developer.android, et j'ai bien compris grâce à ton exemple pour un redimensionnement linéaire (élément de la matrice = nouvelle taille / ancienne taille), mais pour passer du rectangle au cercle??
* J'ai le même problème pour une autre utilisation d'une Bitmap, ci-dessous le code puis le bitmap:
* code:
* logcat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Bitmap originalImage = BitmapFactory.decodeResource(getResources(),R.drawable.image); int width = originalImage.getWidth();
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 07-25 17:12:30.630: DEBUG/AndroidRuntime(326): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 07-25 17:12:30.630: DEBUG/AndroidRuntime(326): CheckJNI is ON 07-25 17:12:30.801: DEBUG/AndroidRuntime(326): --- registering native functions --- 07-25 17:12:31.130: DEBUG/ddm-heap(326): Got feature list request 07-25 17:12:31.440: DEBUG/PackageParser(65): Scanning package: /data/app/vmdl70682.tmp 07-25 17:12:31.580: DEBUG/dalvikvm(65): GC freed 22728 objects / 1123800 bytes in 104ms 07-25 17:12:31.670: INFO/PackageManager(65): Removing non-system package:obd.ProgAndroid.Test 07-25 17:12:31.670: DEBUG/PackageManager(65): Removing package obd.ProgAndroid.Test 07-25 17:12:31.670: DEBUG/PackageManager(65): Activities: obd.ProgAndroid.Test.TestActivity 07-25 17:12:31.760: DEBUG/PackageManager(65): Scanning package obd.ProgAndroid.Test 07-25 17:12:31.760: INFO/PackageManager(65): /data/app/vmdl70682.tmp changed; unpacking 07-25 17:12:31.770: DEBUG/installd(31): DexInv: --- BEGIN '/data/app/vmdl70682.tmp' --- 07-25 17:12:31.930: DEBUG/dalvikvm(332): DexOpt: load 29ms, verify 39ms, opt 2ms 07-25 17:12:31.940: DEBUG/installd(31): DexInv: --- END '/data/app/vmdl70682.tmp' (success) --- 07-25 17:12:31.940: DEBUG/PackageManager(65): Activities: obd.ProgAndroid.Test.TestActivity 07-25 17:12:31.950: DEBUG/ActivityManager(65): Uninstalling process obd.ProgAndroid.Test 07-25 17:12:32.040: INFO/installd(31): move /data/dalvik-cache/data@app@vmdl70682.tmp@classes.dex -> /data/dalvik-cache/data@app@obd.ProgAndroid.Test.apk@classes.dex 07-25 17:12:32.050: DEBUG/PackageManager(65): New package installed in /data/app/obd.ProgAndroid.Test.apk 07-25 17:12:32.250: DEBUG/AndroidRuntime(326): Shutting down VM 07-25 17:12:32.250: DEBUG/dalvikvm(326): DestroyJavaVM waiting for non-daemon threads to exit 07-25 17:12:32.260: DEBUG/dalvikvm(326): DestroyJavaVM shutting VM down 07-25 17:12:32.260: DEBUG/dalvikvm(326): HeapWorker thread shutting down 07-25 17:12:32.260: DEBUG/dalvikvm(326): HeapWorker thread has shut down 07-25 17:12:32.260: DEBUG/jdwp(326): JDWP shutting down net... 07-25 17:12:32.260: INFO/dalvikvm(326): Debugger has detached; object registry had 1 entries 07-25 17:12:32.260: DEBUG/dalvikvm(326): VM cleaning up 07-25 17:12:32.270: DEBUG/dalvikvm(326): LinearAlloc 0x0 used 623916 of 5242880 (11%) 07-25 17:12:32.300: ERROR/AndroidRuntime(326): ERROR: thread attach failed 07-25 17:12:32.300: DEBUG/ActivityManager(65): Uninstalling process obd.ProgAndroid.Test 07-25 17:12:32.710: DEBUG/dalvikvm(65): GC freed 4373 objects / 327960 bytes in 285ms 07-25 17:12:32.720: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f0700e5 07-25 17:12:32.750: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f020031 07-25 17:12:32.760: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f020030 07-25 17:12:32.760: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f050000 07-25 17:12:32.810: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f060000 07-25 17:12:32.820: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f060001 07-25 17:12:32.980: DEBUG/dalvikvm(142): GC freed 146 objects / 5712 bytes in 252ms 07-25 17:12:33.020: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f0700e5 07-25 17:12:33.020: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f020031 07-25 17:12:33.020: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f020030 07-25 17:12:33.020: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f050000 07-25 17:12:33.030: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f060000 07-25 17:12:33.030: WARN/ResourceType(65): Resources don't contain package for resource number 0x7f060001 07-25 17:12:33.430: DEBUG/AndroidRuntime(337): >>>>>>>>>>>>>> AndroidRuntime START <<<<<<<<<<<<<< 07-25 17:12:33.430: DEBUG/AndroidRuntime(337): CheckJNI is ON 07-25 17:12:33.680: DEBUG/AndroidRuntime(337): --- registering native functions --- 07-25 17:12:33.960: DEBUG/ddm-heap(337): Got feature list request 07-25 17:12:34.280: INFO/ActivityManager(65): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=obd.ProgAndroid.Test/.TestActivity } 07-25 17:12:34.360: INFO/ActivityManager(65): Start proc obd.ProgAndroid.Test for activity obd.ProgAndroid.Test/.TestActivity: pid=343 uid=10024 gids={} 07-25 17:12:34.360: DEBUG/AndroidRuntime(337): Shutting down VM 07-25 17:12:34.370: DEBUG/dalvikvm(337): DestroyJavaVM waiting for non-daemon threads to exit 07-25 17:12:34.370: DEBUG/dalvikvm(337): DestroyJavaVM shutting VM down 07-25 17:12:34.370: DEBUG/dalvikvm(337): HeapWorker thread shutting down 07-25 17:12:34.380: DEBUG/dalvikvm(337): HeapWorker thread has shut down 07-25 17:12:34.380: DEBUG/jdwp(337): JDWP shutting down net... 07-25 17:12:34.380: INFO/dalvikvm(337): Debugger has detached; object registry had 1 entries 07-25 17:12:34.392: DEBUG/dalvikvm(337): VM cleaning up 07-25 17:12:34.420: ERROR/AndroidRuntime(337): ERROR: thread attach failed 07-25 17:12:34.431: DEBUG/dalvikvm(337): LinearAlloc 0x0 used 639500 of 5242880 (12%) 07-25 17:12:34.560: DEBUG/ddm-heap(343): Got feature list request 07-25 17:12:35.000: WARN/ResourceType(343): getEntry failing because entryIndex 1 is beyond type entryCount 1 07-25 17:12:35.000: WARN/ResourceType(343): Failure getting entry for 0x7f020001 (t=1 e=1) in package 0: 0x80000001 07-25 17:12:35.000: DEBUG/AndroidRuntime(343): Shutting down VM 07-25 17:12:35.000: WARN/dalvikvm(343): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 07-25 17:12:35.000: ERROR/AndroidRuntime(343): Uncaught handler: thread main exiting due to uncaught exception 07-25 17:12:35.040: ERROR/AndroidRuntime(343): java.lang.RuntimeException: Unable to start activity ComponentInfo{obd.ProgAndroid.Test/obd.ProgAndroid.Test.TestActivity}: java.lang.NullPointerException 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.app.ActivityThread.access$2200(ActivityThread.java:119) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.os.Handler.dispatchMessage(Handler.java:99) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.os.Looper.loop(Looper.java:123) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.app.ActivityThread.main(ActivityThread.java:4363) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at java.lang.reflect.Method.invokeNative(Native Method) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at java.lang.reflect.Method.invoke(Method.java:521) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at dalvik.system.NativeStart.main(Native Method) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): Caused by: java.lang.NullPointerException 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at obd.ProgAndroid.Test.TestActivity.onCreate(TestActivity.java:34) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459) 07-25 17:12:35.040: ERROR/AndroidRuntime(343): ... 11 more 07-25 17:12:35.050: INFO/Process(65): Sending signal. PID: 343 SIG: 3 07-25 17:12:35.060: INFO/dalvikvm(343): threadid=7: reacting to signal 3 07-25 17:12:35.060: ERROR/dalvikvm(343): Unable to open stack trace file '/data/anr/traces.txt': Permission denied 07-25 17:12:44.394: WARN/ActivityManager(65): Launch timeout has expired, giving up wake lock! 07-25 17:12:44.724: WARN/ActivityManager(65): Activity idle timeout for HistoryRecord{44c1eb70 obd.ProgAndroid.Test/.TestActivity} 07-25 17:12:49.910: DEBUG/dalvikvm(142): GC freed 2134 objects / 123880 bytes in 154ms
Partager