[Kotlin] 画像のByte配列化

本文上広告1



しばらくぶりにKotlinでのByte配列を扱うので忘れかけていたのと、画像をByte配列にして取得する方法に接するのは初めてだったので、自分用メモとして書き残します。今後たぶん多用します。まず、主な適用先は以下です。

目標 PC⇔Android間の通信を技術的に調べたいと思っていました。今回はその2回目、 PC⇔Android間のソケット通信を...
C# Kotlin 間で画像の転送を行う予定です。

Byte配列そのものについて

Byte配列の扱い方

Kotlin公式等を参考にしながらいつも思い出しているのですが、時間がたつとわすれちゃう。基本イミュータブル(Imutable)なので、要素の変更や追加・削除不可。変更しようとした場合は、変換してミュータブルな配列にしないといけません。

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とかの勉強やまとめは先に自分のなかでできていたので、すっと入ってきた感じがします。以下参考まで。

ようやく目的地に到着 カメラロール(ギャラリー)にある画像をようやくRecylcerViewのサンプルに追加することができました。長か...

シェアする

  • このエントリーをはてなブックマークに追加

フォローする