しばらくぶりにKotlinでのByte配列を扱うので忘れかけていたのと、画像をByte配列にして取得する方法に接するのは初めてだったので、自分用メモとして書き残します。今後たぶん多用します。まず、主な適用先は以下です。
Byte配列そのものについて
Byte配列の扱い方
Kotlin公式等を参考にしながらいつも思い出しているのですが、時間がたつとわすれちゃう。基本イミュータブル(Imutable)なので、要素の変更や追加・削除不可。変更しようとした場合は、変換してミュータブルな配列にしないといけません。
- Kotlinをはじめよう〜コレクションなど〜(RE:ENGINESさん)
- 基本の型 – 配列 (Kotlin 公式)
Byte配列からLong/Intへの変換
KotlinでByteArrayをLong, Intに変換する (@k-yamada-githubさん)を参考にさせて頂き、LongやIntをByte配列へ変換します。
shl とは?
Long/Int変換の参考で見慣れないものが出てきました。ご存じの方はパスして次に行ってください。しらべると先ほどの基本の型 – 演算 (Kotlin 公式)に書いてました。 符号付き左シフト (Javaの <<
)ということでビット演算はこのshl を使いましょう。(shl = shift left と覚えると覚えやすいかも。)
画像のByte配列化
Android端末内の画像をアップロード (@yamikoo@githubさん)を参考にさせてもらいながら、画像をByte配列にするコードを見てみます。以下のコードは引用(Java)。
// 画像をjpeg形式でstreamに保存 ByteArrayOutputStream jpg = new ByteArrayOutputStream(); param.bmp.compress(Bitmap.CompressFormat.JPEG, 100, jpg);
少し間を飛ばして以下の部分でToByteArray()にします。
// データを投げる OutputStream out = new BufferedOutputStream(connection.getOutputStream()); out.write(jpg.toByteArray()); out.flush();
ByteArrayOutputStream (Andrid公式)にも書かれたり、Android開発:内部ストレージにおいて画像を保存・読み込みする,また画像のUriをbitmapに変換する(Kotlinで)にもこちらはKotlinで書かれているので、大丈夫かと思いますが、一度実際にやってみる必要はありそうです。
感想
色々な情報があったので、画像のByte配列化も簡単に行けそうな感じがしました。あと、SAFとかの勉強やまとめは先に自分のなかでできていたので、すっと入ってきた感じがします。以下参考まで。