CommandManager.sendCanvasImage

fun sendCanvasImage(id: Int, x: Int, y: Int, width: Int, height: Int, grayscale: ByteArray)

概要

キャンバスに画像を置く。送るだけで画面が切り替わるので、先にページを開く必要はない。今ある要素は残したまま、同じ id の画像だけ差し替わる。渡すのはリサイズ済みのグレースケールで、左上から行優先の並び。輝度は 0-255 のまま渡してよく、3bit(0-7)への量子化とRLE圧縮はSDK内で行う。画像は id ごとに8枚まで置けるが、グラスのバッファは全画像で共有していて、置いてある画像の width * height * 2 の合計に受信中の圧縮データを足した値が380,000バイトを超えると受け取れない。192角なら5枚が目安。画像はテキスト要素の背面に描かれる。ナビの全体ルート画像とバッファを共有しているため、ナビ表示中は使えない。数百バイトずつに分けて送るので、大きい画像ほど表示まで時間がかかる。転送しきる前に別の id を送るとファームは受信中の画像を捨てるが、SDK が分割送信を直列化するので続けて呼んでも順番に送られる。ファームウェア 1.2.0 以上が対象。

引数

名前 型 説明
id Int 画像の識別子。0..7 の8枚まで。同じ id に送ると座標ごと差し替わる
x Int 画像の左上のx座標。x + width は 576 まで
y Int 画像の左上のy座標。y + height は 360 まで
width Int 画像の幅
height Int 画像の高さ
grayscale ByteArray 1画素1バイトのグレースケール。長さは width * height 以上

戻り値

Unit

使用例

// grayscale は1画素1バイト・左上から行優先。3bitへの量子化とRLE圧縮はSDKが行う
commandManager.sendCanvasImage(id = 0, x = 16, y = 84, width = 192, height = 192, grayscale = left)
// 別の id なら並べて置ける。続けて呼んでもSDKが送信を直列化する
commandManager.sendCanvasImage(id = 1, x = 368, y = 84, width = 192, height = 192, grayscale = right)
// テキストは画像の手前に描かれるので、キャプションを重ねられる
commandManager.sendCanvasElements(
    listOf(
        CommandManager.CanvasElement(id = 0, x = 16, y = 300, width = 192, height = 40, text = "左"),
    ),
)

関連