Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Начиная с версии Android 2.2, в составе SDK появился новый класс android.media.ThumbnailUtils позволяющий создавать миниатюры для мультимедиа.
Рассмотрим простейший пример генерации миниатюры из картинки, которая находится в ресурсах. Добавим на экран активности компонент ImageView, а в папку res/drawable какое-нибудь достаточно большое изображение. В коде попробуем создать миниатюру заданных размеров.
package ru.alexanderklimov.thumbnails
import android.graphics.BitmapFactory
import android.media.ThumbnailUtils
import android.os.Bundle
import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private val thumbnailWidth = 150
private val thumbnailHeight = 150
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val thumbnailImageView: ImageView = findViewById(R.id.imageView)
val sourceBitmap = BitmapFactory.decodeResource(
resources,
R.drawable.cat_tongue
)
val thumbnailBitmap = ThumbnailUtils.extractThumbnail(
sourceBitmap,
thumbnailWidth, thumbnailHeight
)
thumbnailImageView.setImageBitmap(thumbnailBitmap)
}
}
Базовый пример не слишком интересен, создать картинку меньшего размера из картинки-источника мы можем и сами. Гораздо интереснее создать миниатюру из видео! Для опытов нам понадобится какой-нибудь видеофайл в формате MP4, например, такой:
Следует сказать, что код уже устарел, оставил для истории.
Модифицируем предыдущий пример:
package ru.alexanderklimov.thumbnails;
import ...
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ImageView thumbnailImageView = (ImageView) findViewById(R.id.imageViewThumbnail);
String filePath = "/sdcard/catprinter1.mp4";
// MINI_KIND: 512 x 384
Bitmap thumbnailBitmap = ThumbnailUtils.createVideoThumbnail(filePath,
MediaStore.Images.Thumbnails.MINI_KIND);
thumbnailImageView.setImageBitmap(thumbnailBitmap);
thumbnailImageView.setImageBitmap(thumbnailBitmap);
}
}
Обратите внимание, что вы можете использовать константу MINI_KIND для создания миниатюры размером 512 x 384, а также константу MICRO_KIND для миниатюры размером 96 x 96.
Путь к файлу для простоты указан явно. В вашем проекте так делать не следует.