获取图片缩略图和视频缩略图的方法:
Java代码:
[java] view plain copy
1. import java.io.File;
2. import android.app.Activity;
3. import android.graphics.Bitmap;
4. import android.graphics.BitmapFactory;
5. import android.media.ThumbnailUtils;
6. import android.os.Bundle;
7. import android.os.Environment;
8. import android.provider.MediaStore;
9. import android.widget.ImageView;
10. /**
11. * 获取图片和视频的缩略图
12. * 这两个方法必须在2.2及以上版本使用,因为其中使用了ThumbnailUtils这个类
13. */
14. public class AndroidTestActivity extends Activity {
15. private ImageView imageThumbnail;
16. private ImageView videoThumbnail;
17.
18. /** Called when the activity is first created. */
19. @Override
20. public void onCreate(Bundle savedInstanceState) {
21. super.onCreate(savedInstanceState);
22. setContentView(R.layout.main);
23.
24. imageThumbnail = (ImageView) findViewById(R.id.image_thumbnail);
25. videoThumbnail = (ImageView) findViewById(R.id.video_thumbnail);
26.
27. String imagePath = Environment.getExternalStorageDirectory()
28. .getAbsolutePath()
29. + File.separator
30. "photo"
31. + File.separator
32. "yexuan.jpg";
33.
34. String videoPath = Environment.getExternalStorageDirectory()
35. .getAbsolutePath()
36. + File.separator
37. "video"
38. + File.separator
39. "醋点灯.avi";
40.
41. 60, 60));
42. 60, 60,
43. MediaStore.Images.Thumbnails.MICRO_KIND));
44. }
45.
46. /**
47. * 根据指定的图像路径和大小来获取缩略图
48. * 此方法有两点好处:
49. * 1. 使用较小的内存空间,第一次获取的bitmap实际上为null,只是为了读取宽度和高度,
50. * 第二次读取的bitmap是根据比例压缩过的图像,第三次读取的bitmap是所要的缩略图。
51. * 2. 缩略图对于原图像来讲没有拉伸,这里使用了2.2版本的新工具ThumbnailUtils,使
52. * 用这个工具生成的图像不会被拉伸。
53. * @param imagePath 图像的路径
54. * @param width 指定输出图像的宽度
55. * @param height 指定输出图像的高度
56. * @return 生成的缩略图
57. */
58. private Bitmap getImageThumbnail(String imagePath, int width, int height) {
59. null;
60. new BitmapFactory.Options();
61. true;
62. // 获取这个图片的宽和高,注意此处的bitmap为null
63. bitmap = BitmapFactory.decodeFile(imagePath, options);
64. false; // 设为 false
65. // 计算缩放比
66. int h = options.outHeight;
67. int w = options.outWidth;
68. int beWidth = w / width;
69. int beHeight = h / height;
70. int be = 1;
71. if (beWidth < beHeight) {
72. be = beWidth;
73. else {
74. be = beHeight;
75. }
76. if (be <= 0) {
77. 1;
78. }
79. options.inSampleSize = be;
80. // 重新读入图片,读取缩放后的bitmap,注意这次要把options.inJustDecodeBounds 设为 false
81. bitmap = BitmapFactory.decodeFile(imagePath, options);
82. // 利用ThumbnailUtils来创建缩略图,这里要指定要缩放哪个Bitmap对象
83. bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
84. ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
85. return bitmap;
86. }
87.
88. /**
89. * 获取视频的缩略图
90. * 先通过ThumbnailUtils来创建一个视频的缩略图,然后再利用ThumbnailUtils来生成指定大小的缩略图。
91. * 如果想要的缩略图的宽和高都小于MICRO_KIND,则类型要使用MICRO_KIND作为kind的值,这样会节省内存。
92. * @param videoPath 视频的路径
93. * @param width 指定输出视频缩略图的宽度
94. * @param height 指定输出视频缩略图的高度度
95. * @param kind 参照MediaStore.Images.Thumbnails类中的常量MINI_KIND和MICRO_KIND。
96. * 其中,MINI_KIND: 512 x 384,MICRO_KIND: 96 x 96
97. * @return 指定大小的视频缩略图
98. */
99. private Bitmap getVideoThumbnail(String videoPath, int width, int height,
100. int kind) {
101. null;
102. // 获取视频的缩略图
103. bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, kind);
104. "w"+bitmap.getWidth());
105. "h"+bitmap.getHeight());
106. bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height,
107. ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
108. return bitmap;
109. }
110.
111. }
main.xml文件:
[java] view plain copy
1. <?xml version="1.0" encoding="utf-8"?>
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3. "fill_parent"
4. "fill_parent"
5. "vertical" >
6.
7. <TextView
8. "fill_parent"
9. "wrap_content"
10. "图片缩略图" />
11.
12. <ImageView
13. "@+id/image_thumbnail"
14. "wrap_content"
15. "wrap_content" />
16.
17. <TextView
18. "fill_parent"
19. "wrap_content"
20. "视频缩略图" />
21.
22. <ImageView
23. "@+id/video_thumbnail"
24. "wrap_content"
25. "wrap_content" />
26.
27. </LinearLayout>
运行后的截图为: