Установите высокое качество изображения с камеры в kotlin внутри фрагмента - PullRequest
1 голос
/ 16 марта 2020

Моя проблема в том, что я получаю чрезвычайно низкокачественное изображение с камеры, когда отображаю его в imageView. Размер imageView установлен на 250dpx250dp в. xml. Пожалуйста, кто-нибудь может мне помочь, я очень ценю это. Я искал inte rnet в течение многих часов и все еще не мог найти идеальное решение !! Пожалуйста, помогите мне. Спасибо!

Вот мой код для захвата камеры Изображение:

class Category_Description : Fragment() {

    var mBitmap: Bitmap? = null

    private val ALL_PERMISSIONS_RESULT = 107
    private val IMAGE_RESULT = 200
    private val REQUEST_IMAGE_CAPTURE = 12345

    var photo: Bitmap?=null
    var resizedPhoto:Bitmap?=null
    var imageUri: Uri?=null
    var filePath:String?=null
    var cursor:Cursor?=null
    var reqFile:RequestBody?=null
    var intermediate:String?=null
    var outputFileUri: Uri? = null

    var camera_FAB: FloatingActionButton? = null
    var upload_FAB: FloatingActionButton? = null
    var imageView:ImageView?= null

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?

    ): View? {
        // Inflate the layout for this fragment
//        val permissions = arrayOf(android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.READ_EXTERNAL_STORAGE,
//            android.Manifest.permission.CAMERA)
//        requestPermissions( permissions,1)
        val v = inflater.inflate(com.example.atry.R.layout.fragment_category__description, container, false)



        camera_FAB = v.findViewById(com.example.atry.R.id.camera)
        upload_FAB= v.findViewById(com.example.atry.R.id.upload)
        imageView = v.findViewById<ImageView>(com.example.atry.R.id.display_image)


        }


        upload_FAB!!.setOnClickListener {
            //            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//                if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
//                }
//            }


            pickImageFromGallery()

        }



        camera_FAB!!.setOnClickListener{

            val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
//            intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri)
            val frag = this
            /** Pass your fragment reference **/
            frag.startActivityForResult(
                intent,
                REQUEST_IMAGE_CAPTURE
            ) // REQUEST_IMAGE_CAPTURE = 12345


        }

        fun hasPermissionInManifest(context: Context, permissionName: String): Boolean {
            val packageName = context.packageName
            try {
                val packageInfo = context.packageManager
                    .getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)
                val declaredPermisisons = packageInfo.requestedPermissions
                if (declaredPermisisons != null && declaredPermisisons.size > 0) {
                    for (p in declaredPermisisons) {
                        if (p == permissionName) {
                            return true
                        }
                    }
                }
            } catch (e: PackageManager.NameNotFoundException) {

            }

            return false
        }


    private fun pickImageFromGallery() {
        //Intent to pick image
        val intent = Intent(Intent.ACTION_PICK)
        intent.type = "image/*"
        startActivityForResult(intent, IMAGE_PICK_CODE)
    }

    companion object {
        //image pick code
        private val IMAGE_PICK_CODE = 1000;
        //Permission code
        private val PERMISSION_CODE = 1001;
    }






    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == Activity.RESULT_OK && data !=null) {
            if (requestCode == REQUEST_IMAGE_CAPTURE){
                val imageView = view!!.findViewById<ImageView>(R.id.display_image)

                //FOR CAMERA CAPTURE



                photo = data.getExtras()!!.get("data") as Bitmap

                val uri = getImageUriFromBitmap(activity!!,photo!!)

                filePath = getPathFromURI(uri)

                Picasso.get().load(uri).into(imageView)


                intermediate = activity!!.contentResolver.getType(uri)

            } else if(requestCode== IMAGE_PICK_CODE) {

                val imageView = view!!.findViewById<ImageView>(R.id.display_image)

                // Get image URI From intent FOR UPLOADING

                imageUri = data.data

                intermediate = activity!!.contentResolver.getType(imageUri!!)

                filePath = getImageFilePath(data)
                if (filePath != null) {

                    mBitmap = BitmapFactory.decodeFile(filePath)
                    imageView.setImageBitmap(mBitmap)

                    cursor!!.close()
}

            }
        }
        super.onActivityResult(requestCode, resultCode, data)
    }



    fun getImageFilePath(data: Intent): String {
        return getImageFromFilePath(data)
    }

    private fun getImageFromFilePath(data: Intent?): String {
        val isCamera = data == null || data.data == null

        return if (isCamera)
            getCaptureImageOutputUri()!!.path!!

        else
            getPathFromURI(data!!.data!!)

    }

    private fun getCaptureImageOutputUri(): Uri? {
        val getImage = activity!!.getExternalFilesDir("")
        if (getImage != null) {
            outputFileUri = Uri.fromFile(File(getImage.path, "profile.png"))

        }
        return outputFileUri
    }




    private fun getImageUri(inContext: Context, inImage: Bitmap): Uri {
        val bytes = ByteArrayOutputStream()
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
        val path =
            MediaStore.Images.Media.insertImage(inContext.contentResolver, inImage, "Title", null)
        return Uri.parse(path)
    }
    fun getImageUriFromBitmap(activity: Activity, bitmap: Bitmap): Uri{
        val bytes = ByteArrayOutputStream()
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
        val path = MediaStore.Images.Media.insertImage(activity.contentResolver, bitmap, "Title", null)
        return Uri.parse(path.toString())
    }

    private fun getPathFromURI(contentUri: Uri): String {

        val proj = arrayOf(MediaStore.Images.Media.DATA)

        cursor = activity!!.contentResolver.query(contentUri, proj, null, null, null)

        if(cursor!=null)
            cursor!!.moveToFirst()

        val column_index = cursor!!.getColumnIndex(proj[0])


        return cursor!!.getString(column_index)
    }


}

...