Реализация кроссплатформенных функций камеры в KMM: сохранение изображений на iOSIOS

Программируем под IOS
Ответить
Anonymous
 Реализация кроссплатформенных функций камеры в KMM: сохранение изображений на iOS

Сообщение Anonymous »

Я работаю над приложением Kotlin Multiplatform Mobile (KMM) и пытаюсь реализовать унифицированные функции камеры, что позволяет пользователям делать фотографии и сохранять их в файловую систему устройства, как на Android, так и на iOS. Пока я успешно завершил реализацию Android, я сталкиваюсь с трудностями в поиске и внедрении эквивалентного подхода для iOS.
для реализации iOS, я пытаюсь использовать UiimagePickerController для сбора фотографий и впоследствии сохранить захваченное изображение. файловая система устройства. Моя главная цель - как можно более беспрепятственно интегрировать эту функциональность в общий код KMM, чтобы обеспечить повторное использование и согласованность на обеих платформах. > Класс в iosmain Использование uiimagepickercontroller , но я сталкиваюсь с проблемами о том, как правильно сохранить захваченное изображение и передать результат обратно в общий код.
Cameramanager выглядит так:
actual class CameraManager {
private var onImagePicked: (ByteArray) -> Unit = {}
@Composable
actual fun registerCameraManager(onImagePicked: (ByteArray) -> Unit) {
this.onImagePicked = onImagePicked
}
@OptIn(ExperimentalForeignApi::class)
actual fun takeImage() {
val picker = UIImagePickerController().apply {
sourceType = UIImagePickerControllerSourceType.UIImagePickerControllerSourceTypeCamera
cameraCaptureMode = UIImagePickerControllerCameraCaptureMode.UIImagePickerControllerCameraCaptureModePhoto
delegate = object : NSObject(), UIImagePickerControllerDelegateProtocol,
UINavigationControllerDelegateProtocol {
override fun imagePickerController(
picker: UIImagePickerController,
didFinishPickingMediaWithInfo: Map
) {
val originalImage = didFinishPickingMediaWithInfo.getValue(
UIImagePickerControllerOriginalImage
) as? UIImage

originalImage?.let { image ->
// Convert image to JPEG data
val data = UIImageJPEGRepresentation(image, 1.0)

// Save to documents directory
val path = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
true
).first().toString()
val filePath = "$path/" + NSUUID.UUID().UUIDString + ".jpg"
data?.writeToFile(filePath, atomically = true)

// Convert to bytes
val bytes = ByteArray(data!!.length.toInt())
//data?.copyBytes(to: bytes)
memcpy(bytes.refTo(0), data!!.bytes, data!!.length)

// Return image bytes
onImagePicked(bytes)
}
picker.dismissViewControllerAnimated(true, null)
}
}
}
UIApplication.sharedApplication.keyWindow?.rootViewController?.presentViewController(
picker, true, null
)
}
}
< /code>
объект этого класса создается только незадолго до использования в моем пользовательском компоненте. Там он создан с < /p>
cameraManager.registerCameraManager { imageBytes ->
onEvent(NoteListEvent.OnPhotoPicked(imageBytes))
}

< /code>
, которая является маленькой вспомогательной функцией < /p>
actual fun createCameraManager(): CameraManager {
return remember{
CameraManagerOld(rootController)
}
}
< /code>
Кто -нибудь может помочь мне в реализации такого механизма или поделиться лучшими практиками для обработки операций камеры и сохранения изображений в приложении KMM? Обработка и реализация фото-библиотеки на iOS была намного проще, чем ...

Подробнее здесь: https://stackoverflow.com/questions/781 ... ges-on-ios
Ответить

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

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

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

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

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