Kitty Опубликовано 2 октября, 2016 Поделиться Опубликовано 2 октября, 2016 Пустое приложение. Код из документации. Попытка получить фото с камеры: void __fastcall TForm1::TakePhotoFromCameraAction1DidFinishTaking(TBitmap *Image) { Image1->Bitmap->Assign(Image); } При нажатии на кнопку приложение вылетает. Кому нибудь удавалось получить фото в С++ Builder Берлин в iOS? Спасибо. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 2 октября, 2016 Модераторы Поделиться Опубликовано 2 октября, 2016 Разрешение камера стоит в настройках приложения? Цитата Ссылка на комментарий
0 Kitty Опубликовано 2 октября, 2016 Автор Поделиться Опубликовано 2 октября, 2016 Я что-то не могу найти, а где это? В проекте iOS пункт вообще Uses Permision пустой. Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 2 октября, 2016 Модераторы Поделиться Опубликовано 2 октября, 2016 Нет, это не в студии. Это на девайсе Цитата Ссылка на комментарий
0 Kitty Опубликовано 2 октября, 2016 Автор Поделиться Опубликовано 2 октября, 2016 Есть тестовый Project1. iOs у меня 2й день в руках. Согласно https://support.apple.com/ru-ru/HT203033 приложение должно запросить само доступ к камере. Цитата Программа не появится в списке, пока она не запросит разрешение на использование ваших данных. Вы можете добавить или удалить разрешение для любой программы, которая запрашивала доступ к данным. Программа может использовать ваши данные, только если вы ей это разрешили. На девайсе я нашла 2 места где оно может быть. Прилагаю скриншоты. Я не знаю что сделать... Приложение падает. Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 Чисто предположение: может быть нужно инициализировать камеру, что-то вроде TPlatformServices.Current.SupportsPlatformService(IFMXCameraService, FCameraService); Или использовать метод RegisterMediaLibraryServices из FMX.MediaLibrary.iOS.pas Kitty 1 Цитата Ссылка на комментарий
0 Kitty Опубликовано 3 октября, 2016 Автор Поделиться Опубликовано 3 октября, 2016 Подскажите, пожалуйста, для открытия галереи c фотографиями надо также сделать доп. шаги не описанные в документации? Например код ниже также приводит к краху приложения iOS. void __fastcall TFormCamera::TakePhotoFromLibraryAction1DidFinishTaking(TBitmap *Image) { Image1->Bitmap->Assign(Image); } Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 (изменено) 19 минут назад, Kitty сказал: Подскажите, пожалуйста, для открытия галереи c фотографиями надо также сделать доп. шаги не описанные в документации? Например код ниже также приводит к краху приложения iOS. void __fastcall TFormCamera::TakePhotoFromLibraryAction1DidFinishTaking(TBitmap *Image) { Image1->Bitmap->Assign(Image); } Это не из-за платформы. Обсуждали на форуме несколько раз уже эту проблему — проблема в том, что работа с UI и Action идет в разных потоках. Получение снимка через Action Menu я делаю так procedure TfmPhotos.TakePhotoFromCameraActionDidFinishTaking(Image: TBitmap); var ScaleFactor: Single; begin if System.Math.Max(Image.Width, Image.Height) > 1024 then begin ScaleFactor := System.Math.Max(Image.Width, Image.Height) / 1024; Image.Resize(Round(Image.Width / ScaleFactor), Round(Image.Height / ScaleFactor)); end; Image1.Bitmap.Assign(Image); end; Ну, т.е. так же, как и у тебя. А... забыл сказать, что нужно вешать Action не на TSpeedButton, а на TButton. выглядят так же, только приложение не падает. Изменено 3 октября, 2016 пользователем Pax Beach Kitty, Равиль Зарипов (ZuBy) и Rusland 3 Цитата Ссылка на комментарий
0 Rusland Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 Pax Beach, почему такой код? Чтобы сберечь память? 4 минуты назад, Pax Beach сказал: Это не из-за платформы. Обсуждали на форуме несколько раз уже эту проблему — проблема в том, что работа с UI и Action идет в разных потоках. Надо синхронизировать? Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 Только что, Rusland сказал: Pax Beach, почему такой код? Чтобы сберечь память? Надо синхронизировать? Да. Но я не стал заморачиваться, просто сменил SpeedButton на Button ) Цитата Ссылка на комментарий
0 Rusland Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 25 минут назад, Pax Beach сказал: Да. Но я не стал заморачиваться, просто сменил SpeedButton на Button ) Странно. Я использую обычный Button, но иногда приложение падает на процедуре TakePhotoFromCameraActionDidFinishTaking Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 октября, 2016 Модераторы Поделиться Опубликовано 3 октября, 2016 10 минут назад, Rusland сказал: Странно. Я использую обычный Button, но иногда приложение падает на процедуре TakePhotoFromCameraActionDidFinishTaking оборачиваешь в синхронизацию? Цитата Ссылка на комментарий
0 Rusland Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 нет... в примерах же Embarcadero не оборачивает Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 октября, 2016 Модераторы Поделиться Опубликовано 3 октября, 2016 Только что, Rusland сказал: нет... в примерах же Embarcadero не оборачивает ну желательно обернуть, т.к. это нативная штука. что там творится в недрах не видно. хуже не будет, но и не факт что поможет. Kitty, Rusland и Pax Beach 3 Цитата Ссылка на комментарий
0 Rusland Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 Оказывается я уже оборачиваю в TThread.Synchronize(nil, procedure Kitty и Равиль Зарипов (ZuBy) 2 Цитата Ссылка на комментарий
0 Kitty Опубликовано 3 октября, 2016 Автор Поделиться Опубликовано 3 октября, 2016 Цитата Да. Но я не стал заморачиваться, просто сменил SpeedButton на Button ) У меня везде только TButton... Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 6 минут назад, Kitty сказал: У меня везде только TButton... А так получится? FThread := TThread.CreateAnonymousThread( procedure begin TThread.Synchronize(TThread.CurrentThread, procedure begin try Image1.Bitmap.Assign(Image); except end; end); end); FThread.FreeOnTerminate := true; FThread.Start; Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 октября, 2016 Модераторы Поделиться Опубликовано 3 октября, 2016 Только что, Pax Beach сказал: А так получится? FThread := TThread.CreateAnonymousThread( procedure begin TThread.Synchronize(TThread.CurrentThread, procedure begin try Image1.Bitmap.Assign(Image); except end; end); end); FThread.FreeOnTerminate := true; FThread.Start; эм, зачем такая конструкция? какой смысл? Цитата Ссылка на комментарий
0 Pax Beach Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 1 час назад, ZuBy сказал: эм, зачем такая конструкция? какой смысл? Размышления на тему синхронизации. А как лучше? Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 октября, 2016 Модераторы Поделиться Опубликовано 3 октября, 2016 14 минут назад, Pax Beach сказал: Размышления на тему синхронизации. А как лучше? этого достаточно TThread.Synchronize(TThread.CurrentThread, procedure begin try Image1.Bitmap.Assign(Image); except end; end); Pax Beach и Kitty 2 Цитата Ссылка на комментарий
0 Rusland Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 8 минут назад, ZuBy сказал: TThread.Synchronize(TThread.CurrentThread, procedure begin try Image1.Bitmap.Assign(Image); except end; end); Раз пошла такая пьянка, то есть ли разница TThread.CurrentThread или nil?: TThread.Synchronize(nil, procedure begin try Image1.Bitmap.Assign(Image); except end; end); Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 октября, 2016 Модераторы Поделиться Опубликовано 3 октября, 2016 (изменено) как я думаю TThread.CurrentThread используется в TThread.Queue (), в обычном TThread.Synchronize() разницы никакой Изменено 3 октября, 2016 пользователем ZuBy Цитата Ссылка на комментарий
0 Kitty Опубликовано 3 октября, 2016 Автор Поделиться Опубликовано 3 октября, 2016 Может кто знает как сию конструкцию транслировать в С++. Не могу найти в докивики ничего полезного... Цитата Ссылка на комментарий
0 Rusland Опубликовано 3 октября, 2016 Поделиться Опубликовано 3 октября, 2016 Может как-то так? TThread::Synchronize(TThread::CurrentThread, Update); void __fastcall Update(void) { Image1->Bitmap->Assign(Image); } Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 октября, 2016 Модераторы Поделиться Опубликовано 3 октября, 2016 2 минуты назад, Rusland сказал: Может как-то так? TThread::Synchronize(TThread::CurrentThread, Update); void __fastcall Update(void) { Image1->Bitmap->Assign(Image); } а где ты возьмешь Image? Цитата Ссылка на комментарий
0 Модераторы Равиль Зарипов (ZuBy) Опубликовано 3 октября, 2016 Модераторы Поделиться Опубликовано 3 октября, 2016 проблема как раз в том что Bitmap непотокозащищенный, все операции с Bitmap нужно в основном потоке делать Цитата Ссылка на комментарий
Вопрос
Kitty
Пустое приложение. Код из документации. Попытка получить фото с камеры:
void __fastcall TForm1::TakePhotoFromCameraAction1DidFinishTaking(TBitmap *Image) { Image1->Bitmap->Assign(Image); }
При нажатии на кнопку приложение вылетает. Кому нибудь удавалось получить фото в С++ Builder Берлин в iOS? Спасибо.
Ссылка на комментарий
Лучшие авторы в вопросе
10
20
32
7
Популярные дни
3 окт
27
4 окт
20
6 окт
7
26 окт
7
Лучшие авторы в вопросе
Brovin Yaroslav 10 постов
Равиль Зарипов (ZuBy) 20 постов
Kitty 32 постов
Pax Beach 7 постов
Популярные дни
3 окт 2016
27 постов
4 окт 2016
20 постов
6 окт 2016
7 постов
26 окт 2016
7 постов
Популярные посты
Brovin Yaroslav
Taking Pictures Using FireMonkey Interfaces
Pax Beach
Это не из-за платформы. Обсуждали на форуме несколько раз уже эту проблему — проблема в том, что работа с UI и Action идет в разных потоках. Получение снимка через Action Menu я делаю так pro
Равиль Зарипов (ZuBy)
ну желательно обернуть, т.к. это нативная штука. что там творится в недрах не видно. хуже не будет, но и не факт что поможет.
Изображения в теме
78 ответов на этот вопрос
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.