LoginSignup
4
2

More than 5 years have passed since last update.

android.media.Imageとはなにか

Posted at

公式ドキュメント

Image | Android Developers

使われどころ

Cameraを使った処理(android.hardware.camera2とか)で画像を取得するとこの形式で取得される。

https://github.com/googlesamples/android-Camera2Basic より

1) Image取得できたときのイベントリスナ

private val onImageAvailableListener = ImageReader.OnImageAvailableListener {
    backgroundHandler?.post(ImageSaver(it.acquireNextImage(), file))
}
  • it.acquireNextImage()でandroid.media.Imageが取得される。
  • onImageAvailableは新しいImageをImageReaderで読み取れるようになったときのイベント

2) ImageReaderの初期化処理

imageReader = ImageReader.newInstance(largest.width, largest.height,
                        ImageFormat.JPEG, /*maxImages*/ 2).apply {
                    setOnImageAvailableListener(onImageAvailableListener, backgroundHandler)
  • ImageReader.newInstance()で上のイベントリスナを渡している。
  • ImageReader.newInstanceの初期化では以下をわたす。
    • int width -> ImageReaderが生成するImageの幅(ピクセル数)
    • int height -> ImageReaderが生成するImageの高さ(ピクセル数)
    • int format -> ImageReaderが生成するImageのフォーマット(ImageFormat, PixelFormat を指定する)
    • maxImages -> アクセスできるようにするImage数

3) Imageをファイルに保存する処理

 val buffer = image.planes[0].buffer
        val bytes = ByteArray(buffer.remaining())
        buffer.get(bytes)
        var output: FileOutputStream? = null
        try {
            output = FileOutputStream(file).apply {
                write(bytes)
            }
        } catch (e: IOException) {
            Log.e(TAG, e.toString())
        } finally {
            image.close()
            output?.let {
                try {
                    it.close()
                } catch (e: IOException) {
                    Log.e(TAG, e.toString())
                }
            }
        }
  • Image.planes[0]をファイルに保存している。

android.media.Imageとは

  • 生成された画像のPixelの情報をBiteBufferとして直接アクセスできるようにするクラス。
  • Image自体はメタ情報(高さ、幅など)を取得できるメソッドと、画像の破棄のためのclose()を持っている。
  • 実際の画像情報を取得するときは、ImageからImage.Planeを参照する。

android.media.Image.Planeとは

  • 画像データ自体のバイト列にアクセスするためのクラス
  • ImageからPlaneの配列が取得できる。
  • Planeがいくつかあってそれらがそれぞれどのような意味かは、画像形式によって異なる。
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2