Исключение: java.io.ioexception: getPixels не удалось с ошибкой неверной шкалойAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Исключение: java.io.ioexception: getPixels не удалось с ошибкой неверной шкалой

Сообщение Anonymous »

В настоящее время я работаю над преобразованием изображения, импортируемого из галереи пользователя в растровую карту.Exception: java.io.IOException: getPixels failed with error invalid scale (Ask Gemini)
at android.graphics.ImageDecoder.nDecodeBitmap(Native Method)
at android.graphics.ImageDecoder.decodeBitmapInternal(ImageDecoder.java:1607)
at android.graphics.ImageDecoder.decodeBitmapImpl(ImageDecoder.java:1761)
at android.graphics.ImageDecoder.decodeBitmap(ImageDecoder.java:1747)
at com.w36495.senty.util.ImageConverter.uriToBitmap(extentions.kt:80)
at com.w36495.senty.view.component.image.picker.ImagePickerViewModel$cropAndSaveImage$2.invokeSuspend(ImagePickerViewModel.kt:143)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:113)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)
< /code>
Я протестировал его на двух реальных устройствах. < /p>
case 1. Android 14 (API 34)
он работает нормально без ошибок с этой функцией (UritobitMap). < /p>
case 2. Adroid 9 (API 28)
rupe u upply, что записано только для рисунков. Это только с imagedecoder.decodebitmap (источник) без OneHeaderDecodEdListener, результат выходит нормально. < /p>
< ImageInfo >
size : 3000x4000
MIMEType : image/jpeg
< /code>
Почему возникает эта ошибка?scale = min(0.36, 0.27) = 0.27
targetWidth = 810
targetHeight = 1080
< /code>
Но почему .. где происходит ошибка? < /p>
fun uriToBitmap(context: Context, uri: Uri): Bitmap {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
val source = ImageDecoder.createSource(context.contentResolver, uri)

try {
val onHeaderDecodedListener =
OnHeaderDecodedListener { decoder, imageInfo, _ ->
val width = imageInfo.size.width.toFloat()
val height = imageInfo.size.height.toFloat()

val maxSize = 1080
val scale = min(maxSize / width, maxSize / height)

val targetWidth = (width * scale).toInt()
val targetHeight = (height * scale).toInt()

decoder.setTargetSize(targetWidth, targetHeight)
}

ImageDecoder.decodeBitmap(source, onHeaderDecodedListener)
} catch (e: Exception) {
Log.d("ImageConverter", "Exception: ${e.stackTraceToString()}")
ImageDecoder.decodeBitmap(source)
}
} else {
MediaStore.Images.Media.getBitmap(context.contentResolver, uri)
}
}


Подробнее здесь: https://stackoverflow.com/questions/796 ... alid-scale
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»