Показать картинку из БД в HEX - PullRequest
0 голосов
/ 16 января 2020

Мне нужно показать картинку из Json файла, полученного с сервера. формат выглядит примерно так: 0xFFD8FFE000104A46494600010101012C012C0000FFDB0043000604050605040606050607070608060506070706080A100A0A09090A14

Есть ли способ сделать изображение из этой строки? я пытаюсь:

class MainActivity : AppCompatActivity() {
val obrazek ="0xFFD8FFE000104A46494600010101012C01...

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val data: ByteArray = obrazek.toByteArray()

        val bm: Bitmap? = BitmapFactory.decodeByteArray(
            data,
            0, data.size )

        imageView.setImageBitmap(bm)
    }

но это не работает. спасибо за помощь.

1 Ответ

0 голосов
/ 16 января 2020

Чтобы правильно преобразовать его в ByteArray:

val obrazek = "0xFFD8FFE000104A46494600010101012C012C0000FFDB00430006040506050406060506070706080A100A0A09090A14"
val hexString = obrazek.substringAfter("0x")
val bigInt = BigInteger(hexString, 16)
val data = bigInt.toByteArray()

BigInteger преобразует шестнадцатеричный код в целые, если вы установите основание на 16. Затем целые числа можно преобразовать в байты.

BitmapFactory.decodeByteArray результаты к нулю. Возможно, данные содержат только пиксели изображения и не обернуты в закодированный формат, такой как PNG.

Я также попробовал этот код:

val bmp = Bitmap.createBitmap(300, 300, Bitmap.Config.ARGB_8888)
val buffer = ByteBuffer.wrap(data)
buffer.rewind()
bmp.copyPixelsFromBuffer(buffer)

Но это дает мне ошибку Buffer not large enough for pixels. Возможно, потому что шестнадцатеричный код, который вы дали, не является полным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...