如何在Android中从位图更新ImageView

3pvhb19x  于 2023-01-19  发布在  Android
关注(0)|答案(1)|浏览(122)

我正在从本地服务器通过套接字接收我的图像的byteArray。byteArray表示为RGB。我正在将其转换为位图。我检查了位图不为空。但当我使用ImageView.setImageBitmap(位图)时,我的Android应用程序崩溃。我已经尝试了很多方法,但我还没有找到解决方案。请帮助我

class Cam : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        Log.d("Cam activity", "onCreate")
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_cam)

        val button_back : Button = findViewById(R.id.button_back)!!
        var textView : TextView = findViewById(R.id.textView)!!
        var imageView: ImageView = findViewById(R.id.Image_update)!!

        Thread {
            Thread.sleep(1000)
            var byteArray = ByteArray(76032)
            Connection.inBytesCam?.read(byteArray)
            var nrOfPixels = byteArray.size / 3 // Three bytes per pixel.
            var pixels = IntArray(nrOfPixels)
            for (i in 0 until nrOfPixels){
                var r = byteArray.get(3*i).toInt()
                var g = byteArray.get(3*i + 1).toInt()
                var b = byteArray.get(3*i + 2).toInt()
                pixels.set(i, Color.rgb(r, g, b))
            }
            var bitmap = Bitmap.createBitmap(pixels, 176, 144, Bitmap.Config.ARGB_8888)
            imageView.setImageBitmap(bitmap)

        }.start()

        button_back.setOnClickListener {
            Thread {
                runOnUiThread {
                    val intent = Intent(this@Cam, ControlActivity::class.java)
                    startActivity(intent)
                }
            }.start()
        }

    }
}

XML语言

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/purple_200"
    tools:layout_editor_absoluteX="0dp"
    tools:layout_editor_absoluteY="-103dp">

    <Button
        android:id="@+id/button_back"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/purple_700"
        android:fontFamily="monospace"
        android:text="Back"
        android:textAlignment="center"
        android:textSize="34sp"
        app:iconTint="@color/purple_700"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.498"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.862" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="246dp"
        android:layout_height="135dp"
        android:layout_marginBottom="52dp"
        android:text="LOG"
        android:textAlignment="textStart"
        app:layout_constraintBottom_toTopOf="@+id/button_back"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.496"
        app:layout_constraintStart_toStartOf="parent" />

    <ImageView
        android:id="@+id/Image_update"
        android:layout_width="176dp"
        android:layout_height="144dp"
        android:layout_marginTop="100dp"
        app:layout_constraintBottom_toTopOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.497"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0"
        app:srcCompat="@drawable/camera_recording" />

</androidx.constraintlayout.widget.ConstraintLayout>

我使用DataInputStream/DataOutputStream将ImageBytes从本地服务器传输到Android上的客户端。我找不到任何解决我的问题的方法
一般来说,我需要在循环中更新图像,就像视频播放器一样。但是我甚至不能更新一个图像:(

dxpyg8gm

dxpyg8gm1#

使用Glide库如下
添加依赖关系;

implementation 'com.github.bumptech.glide:glide:4.11.0'

用于您的活动等。

Glide.with(context)
    .load(bitmap)
    .into(imageView)

相关问题