TransWikia.com

Передача картинки массивом байт по Websocket

Stack Overflow на русском Asked by Njves on November 30, 2021

Возможно ли декодировать картинку с android устройство и передать по websocket`у?
Есть ли пример кода или статья которую можно прочитать.

2 Answers

С проблемой разобрался! Но на заметку фотографии отправляются в уменьшеном размере

onActivityResult

val bitmap = data?.extras?.get("data") as Bitmap
ivStudentPhoto.setImageBitmap(bitmap)
val byteArrayOutput = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, byteArrayOutput)
photoArray = byteArrayOutput.toByteArray()

Button

val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
startActivityForResult(cameraIntent, REQUEST_PHOTO);

Answered by Njves on November 30, 2021

Могу предложить ознакомится с вариантом кода который я использую у себя в проекте. Допускаю что картинку вы будете брать из файловой системы и поэтому обработка будет происходить в методе onActivityResult:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        when {
            requestCode == 1 && resultCode == Activity.RESULT_OK -> {
                if (data != null) {
                    val fileUri = data.data!!
                    var name = ""
                    var size: Long? = null

                    fileUri.let { returnUri ->
                        contentResolver.query(returnUri, null, null, null, null)
                    }?.use { cursor ->
                        val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME)
                        val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE)
                        cursor.moveToFirst()
                        name = cursor.getString(nameIndex)
                        size = cursor.getLong(sizeIndex)
                    }


                    val content = data.data?.let { uri -> contentResolver.openInputStream(uri).use { it!!.readBytes() } }
                    val fileContent = String(content!!, Charsets.ISO_8859_1)

                    sendFilePart(0, fileContent, name, size!!)
                  
                }
            }

            requestCode == 2 && resultCode == Activity.RESULT_OK -> {
                if (data != null) {
                     ....
                }

            }


            else -> {
            }
        }

    }

в коде выше вы получаете файл и дальше вытаскиваете из него байты content , имя name и размер size. Дальше лично у меня идет отправка файла в том формате который принимает сокет, а именно в текстовом:

 ws.send(ChatRequestMessages.sendFilePart(fileContent, fileName, fileSize))

переменная fileContent идет в стринг поэтому можете делать дальше что вам нужно по вашему заданию. Может поможет такой способ, если что-то будет непонятно - спрашивайте :)

Answered by Andrew on November 30, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP