首页 > 解决方案 > 为什么我不能模拟远视?

问题描述

我想模拟远视色盲。

这就是我要的: 在此处输入图像描述

这是代码

    @RequiresApi(Build.VERSION_CODES.O)
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == cameraRequest) {
            val photo: Bitmap = data?.extras?.get("data") as Bitmap
            val mutablePhoto = photo.copy(Bitmap.Config.ARGB_8888, true)
            val imheight = mutablePhoto.height
            val imwidth = mutablePhoto.width

            val nprotanopia = arrayOf<Float>(0.567F, 0.433F,0F,0F,0F,0.558F,0.442F,0F,0F,0F,0F,0.242F,0.758F,0F,0F,0F,0F,0F,1F,0F,0F,0F,0F,0F,1F)

            fun setN(n: Float): Float {
                return if (n < 0) 0F else if (n < 255) n else 255F
            }

            for (y in 0 until imheight) {
                for (x in 0 until imwidth) {
                    val i = mutablePhoto.getPixel(x, y)

                    Log.d("RI", i.toString())

                    val red: Float = Color.red(i).toFloat()
                    val blue: Float = Color.blue(i).toFloat()
                    val green: Float = Color.green(i).toFloat()
                    val alpha: Float = Color.alpha(i).toFloat()

                    val nR=((red*nprotanopia[0])+(green*nprotanopia[1])+(blue*nprotanopia[2])+(alpha*nprotanopia[3])+nprotanopia[4])
                    val nG=((red*nprotanopia[5])+(green*nprotanopia[6])+(blue*nprotanopia[7])+(alpha*nprotanopia[8])+nprotanopia[9])
                    val nB=((red*nprotanopia[10])+(green*nprotanopia[11])+(blue*nprotanopia[12])+(alpha*nprotanopia[13])+nprotanopia[14])
                    val nA=((red*nprotanopia[15])+(green*nprotanopia[16])+(blue*nprotanopia[17])+(alpha*nprotanopia[18])+nprotanopia[19])

                    val r: Float = setN(nR)
                    val g: Float = setN(nG)
                    val B: Float = setN(nB)
                    val A: Float = setN(nA)

                    Log.d("R", r.toString())

                    mutablePhoto.setPixel(x, y, Color.argb(A, r, g, B))
                }
            }
            imageView.setImageBitmap(mutablePhoto)
        }
    }

这是输出: 在此处输入图像描述

我不知道出了什么问题。我从网络档案中得到了关于 protanopia的理论

标签: androidkotlinbitmap

解决方案


推荐阅读