Я работаю над приложением 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
Реализация кроссплатформенных функций камеры в KMM: сохранение изображений на iOS ⇐ IOS
Программируем под IOS
1738110712
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 была намного проще, чем ...
Подробнее здесь: [url]https://stackoverflow.com/questions/78136270/implementing-cross-platform-camera-functionality-in-kmm-saving-images-on-ios[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия