Вопросы

Есть такой код:

    if TPlatformServices.Current.SupportsPlatformService(IFMXCameraService, Service) then
    begin
        Params.Editable := True;
        Params.NeedSaveToAlbum    := False;
        Params.RequiredResolution := TSize.Create(self.ClientHeight, self.ClientHeight);
        Params.OnDidFinishTaking  := actTakePhotoFromCameraDidFinishTaking;
        Service.TakePhoto(btnInfoAddPhoto, Params);
    end
    else
        ShowMessage('This device does not support the camera service');

После того как фото сделано, появляется ошибка EBitmapLoadingFailed 'Loading bitmap failed (/storage/emulated/0/DCIM/Camera/IMG_20170503_170826.jpg).'
Появилась после того как убрал из проекта права READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE.

 

Вопрос: можно ли получать фото от камеры минуя их сохранение в память утсройства?

PS спрашиваю, т.к. стоит задача избавиться от ненужных прав в манифесте.

Всем заранее спасибо!

Изменено пользователем Barbanel

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 1

разрешения нужны, т.к. папка в которую автоматически сохраняется файл, не является директорией проекта

а значит используется запись и чтение с внешнего носителя

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Да, понятно что раз идет запись на носитель, то следовательно нужны разрешения на чтение.

Вопрос в том, можно ли получить фото с камеры без записи на носитель?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

гляньте исходник получения изображения может быть что то и добудете от туда. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

пробуйте использовать TCameraComponent, может там работает по другому

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
  • 0

Попробовали. К сожалению скорость работы этого компонента на устройстве - дикая лажа, оставляет желать лучшего...

Вопрос закрыт, будем использовать соответствующие права.

Всем спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

  • Похожий контент

    • От Pax Beach
      В Android 6 на Berlin 10.1.1 перестала работать стандартная функция TakePhotoFromCameraAction.

      Иногда работает, иногда нет.
      Поэтому я решил написать нативную замену этой функции. За основу взят пример с портала разработчиков Android.
      Мой пример про видео на базе отправки Intetn смартфону и получение результата в виде другого Intent, отлично работает.
      Но для фотографий этот пример сыпется, после выполнения фотографирования система возвращается в мое приложение и оно вылетает с ошибкой:
      Если заглянуть в исходнки, там все обвязано сообщениями в лог монитора. Последнее сообщение «+ Intent is sent».
      Помогите пожалуйста разобраться, в чем может быть проблема?
       
      PhotoIntent.zip
    • От Rusland
      Из демо AccessCameraApp взял код для получения снимка с камеры (собственно и кода там одна строчка).
      Периодически после вызова камеры и получения снимка я получаю черный экран (то есть управление обратно в приложение не передается)... через несколько секунд выходит ошибка Segmentation fault.

      Как лечить?
      PS. Поставил точку останова на 
      procedure TFrmMain.TakePhotoFromCameraAction1DidFinishTaking(Image: TBitmap); begin ImgOrientir.Bitmap.Assign(Image); end; сюда управление не доходит !
       
    • От kolyalyan
      У меня следующая проблема, когда подключаюсь к камере телефона, то кадры отображаются с ужасной задержкой, нааамного медленнее чем в сторонних приложениях работающих с камерой.

      Для подключения к камере использую следующий код:
       
      procedure TForm1.FormShow(Sender: TObject); var CDM : TCaptureDeviceManager; VC : TVideoCaptureDevice; begin CDM := TCaptureDeviceManager.Current; VC := CDM.DefaultVideoCaptureDevice; if (VC <> nil) then VC.OnSampleBufferReady := VideoBufferReady; VC.StartCapture; end; Для загрузки кадров в TImage этот:
       
      procedure TForml.VideoBufferReady(Sender: TObject; const ATime: int64); var VCD : TVideoCaptureDevice; begin VCD := Sender as TVideoCaptureDevice; VCD.SampleBufferToBitmap(Image1.Bitmap, True); end; Ещё раз повторюсь, что всё работает, но чрезвычайно медленно. Пробовал стандартный компонент TCameraComponent, но он работает также или даже ещё медленнее.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу