@chelovekus

Почему imageView.setImageBitmap(bitmap) не ставит изображение?

Код
val socket = Socket("", 12345)

            val inputStream = socket.getInputStream()
            val outputStream = socket.getOutputStream()

            while (true) {
                outputStream.write(ByteArray(1))

                val buffer = ByteArray(300000)

                val image = inputStream.read(buffer)
                println(buffer)
                println(image)

                val imageView: ImageView = findViewById(R.id.imageView)

                val bitmap = BitmapFactory.decodeByteArray(buffer, 0, image)

                println(bitmap)

                runOnUiThread {
                    imageView.setImageBitmap(bitmap)
                }
            }


Отправляется вот так
import java.awt.Rectangle
import java.awt.Robot
import java.awt.Toolkit
import java.awt.image.BufferedImage
import java.io.ByteArrayOutputStream
import java.net.ServerSocket
import javax.imageio.ImageIO

fun screenshot(): ByteArray {
    val robot = Robot()

    val screenSize = Toolkit.getDefaultToolkit().screenSize
    val screenRect = Rectangle(screenSize)
    val image: BufferedImage = robot.createScreenCapture(screenRect)
    val image1 = ByteArrayOutputStream()

    ImageIO.write(image, "png", image1)

    return image1.toByteArray()
}

fun main() {
    println(screenshot().size)
    val serverSocket = ServerSocket(12345)

    val clientSocket = serverSocket.accept()

    val inputStream = clientSocket.getInputStream()
    val outputStream = clientSocket.getOutputStream()

    while (true) {
        val buffer = ByteArray(300000)
        val bytesRead = inputStream.read(buffer)
        if (bytesRead == -1) {
            break
        }

        outputStream.write(screenshot())
    }

    clientSocket.close()
    serverSocket.close()
}
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ответы на вопрос 1
@5465
Предположу, что проблема может быть в том, что при вызове метода imageView.setImageBitmap(bitmap) изображение не отображается, потому что в коде не устанавливается LayoutParams для ImageView. В этом случае размеры ImageView не определены и установка изображения не может отобразить его на экране.

Попробуйте установить параметры макета в коде до установки изображения. Например, для установки размера можно использовать setMinimumWidth() и setMinimumHeight(), а для установки макета setLayoutParams().

Кроме того, убедитесь, что изображение успешно декодировано и что оно не равно null. Для этого вы можете использовать проверку bitmap != null.

Вот как может выглядеть код с установкой параметров макета:

val imageView: ImageView = findViewById(R.id.imageView)

val bitmap = BitmapFactory.decodeByteArray(buffer, 0, image)

if (bitmap != null) {
    imageView.minimumWidth = bitmap.width
    imageView.minimumHeight = bitmap.height

    val params: ViewGroup.LayoutParams = ViewGroup.LayoutParams(bitmap.width, bitmap.height)
    imageView.layoutParams = params

    imageView.setImageBitmap(bitmap)
}


Если это не поможет, попробуйте добавить обработку исключений и посмотрите, возникают ли какие-либо ошибки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы