Моя проблема в том, что я получаю чрезвычайно низкокачественное изображение с камеры, когда отображаю его в 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)
}
}