Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio 缩放android设备上保存的图像_Android Studio_Kotlin - Fatal编程技术网

Android studio 缩放android设备上保存的图像

Android studio 缩放android设备上保存的图像,android-studio,kotlin,Android Studio,Kotlin,我正在给用照相机拍摄的照片添加一帧。 保存图像时,如图所示,它看起来太放大了 我正在尝试使用以下代码缩放图像: private fun getScaledBitMapBaseOnScreenSize(bitmapOriginal: Bitmap): Bitmap? { var scaledBitmap: Bitmap? = null try { val metrics = DisplayMetrics() val width = bitmapOri

我正在给用照相机拍摄的照片添加一帧。 保存图像时,如图所示,它看起来太放大了

我正在尝试使用以下代码缩放图像:

private fun getScaledBitMapBaseOnScreenSize(bitmapOriginal: Bitmap): Bitmap? {
    var scaledBitmap: Bitmap? = null
    try {
        val metrics = DisplayMetrics()
        val width = bitmapOriginal.width
        val height = bitmapOriginal.height
        val scaleWidth = metrics.scaledDensity
        val scaleHeight = metrics.scaledDensity

        // create a matrix for the manipulation
        val matrix = Matrix()
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight)
        
        scaledBitmap = Bitmap.createBitmap(bitmapOriginal, 0, 0, width, height, matrix, true)
    } catch (e: java.lang.Exception) {
        e.printStackTrace()
    }

    Log.d(TAG, scaledBitmap.toString())
    return scaledBitmap
}
getScaledBitmap返回null,查看方法Bitmap.createBitmap内部返回null。更奇怪的是,设备的大小和比例与拍摄的图像相同,因此这种方法实际上是无用的

我想获得正确比例的帧和捕获的图像。我不确定我是否应该调整大小或可能改变我构建关节图像的方式,如下图所示

cameraKitView.captureImage { cameraKitView, capturedImage ->
            val date = Date()
            val imgName = "Casino Fun $date"

            var capturedImage : Bitmap = BitmapFactory.decodeByteArray(
                capturedImage, 0, capturedImage.size
            )
                .copy(Bitmap.Config.ARGB_8888, true)
            var canvas = Canvas(capturedImage)
            val curFrame = BitmapFactory.decodeResource(resources, activeFrameSource)
            val paint = Paint()

            canvas.drawBitmap(curFrame, 0f, 0f, paint)
            try {
                MediaStore.Images.Media.insertImage(
                    contentResolver,
                    getScaledBitMapBaseOnScreenSize(capturedImage),
                    imgName,
                    "Image Saved"
                )
            } catch (e: IOException) {
                e.printStackTrace()
            }

问题在于curFrame位图,它的大小要比takenImage大得多,所以我必须使用

val scaledFrame = Bitmap.createScaledBitmap(curFrame, takenImage.width, takenImage.height, false)
我建议的另一件事是验证你得到的设计