Освой 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)
    }
}

Миниатюра из видео (Java)

Базовый пример не слишком интересен, создать картинку меньшего размера из картинки-источника мы можем и сами. Гораздо интереснее создать миниатюру из видео! Для опытов нам понадобится какой-нибудь видеофайл в формате 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.

Путь к файлу для простоты указан явно. В вашем проекте так делать не следует.

Реклама