Jump to content

Анонс 1.11.0.0 и TfgPhotoPicker


Yaroslav Brovin

948 views

В следующем релизе FGX Native 1.11.0.0 будет много новых интересных возможностей, которые безусловно найдут свое место в ваших приложениях. В этой статье поговорим о первой новинке: получение фотографии с камеры или из системной галереи изображений.

До версии 1.11.0.0 получение фотографии с камеры, было не самой тривиальной задачей. Было два решения, которым обычно пользовались разработчики:

  1. Использование напрямую камеры и разработка своего решение на базе демонстрационного проекта "Компоненты" -> "TfgCamer" -> "Фотокамера". Несмотря на то, что этот способ рабочий и он дает возможности по кастомизации внешнего вида видеоискателя, зачастую требуется просто получить фотографию от пользователя.
  2.  Использование нативного API каждой платформы для отправки запроса на получение фотографии системным приложениям.

TfgPhotoPicker

В этом релизе мы предлагаем кроссплатформенное решение в виде специального типа пикера, используемого для выбора фотографии из системной галереи изображений или снятия фотографии с системной камеры. 

Чтобы отправить запрос на получение фотографии с камеры достаточно написать всего три строчки кода:

uses
  FGX.Assets, FGX.Assets.Helpers, FGX.Pickers.Photo;

procedure TFormMain.btnTakePhotoFromCameraTap(Sender: TObject);
begin
  TfgPickerPhotoFactory.PickPhotoFromCamera(btnTakePhotoFromCamera, procedure(const AFileName: TFileName) begin
    TfgAssetsManager.Current.AddBitmapFromFile('Photo', AFileName, True);
  end);
end;

Для получения фотографии из галереи:

procedure TFormMain.btnTakePhotoFromLibraryTap(Sender: TObject);
begin
  TfgPickerPhotoFactory.PickPhotoFromLibrary(btnTakePhotoFromLibrary, procedure(const AFileName: TFileName) begin
    TfgAssetsManager.Current.AddBitmapFromFile('Photo', AFileName, True);
  end);
end;

Запрос отправляет через специальную фабрику FGX.Pickers.TfgPickerPhotoFactory, которая предлагает три метода:

  TfgPickerPhotoFactory = class
  public
    /// <summary>Создает и возвращает платформенный пикер получения фотографии для ручной работы.</summary>
    /// <remarks>Удаление пикера лежит на плечах вызываемого кода.</remarks>
    class function CreatePicker(const AOwner: TObject): TfgPickerPhoto;

    /// <summary>
    ///   Иницирует получение фотографии с системного приложения камеры. Фотография возвращается в переданную
    ///   анонимную процедуру <c>AOnDidFinishPickingCallback</c>.
    /// </summary>
    /// <remarks>
    ///   Вам не требуется следить за временем жизни возвращаемого пикера. Пикер автоматически удалится после того,
    ///   как он будет закрыт пользователем.
    /// </remarks>
    class function PickPhotoFromCamera(const AOwner: TObject; const AOnDidFinishPickingCallback: TfgDidFinishPickingCallback): TfgPickerPhoto;

    /// <summary>
    ///   Иницирует получение фотографии с системного приложения галереи изображений. Фотография возвращается в
    ///   переданную анонимную процедуру <c>AOnDidFinishPickingCallback</c>.
    /// </summary>
    /// <remarks>
    ///   Вам не требуется следить за временем жизни возвращаемого пикера. Пикер автоматически удалится после того,
    ///   как он будет закрыт пользователем.
    /// </remarks>
    class function PickPhotoFromLibrary(const AOwner: TObject; const AOnDidFinishPickingCallback: TfgDidFinishPickingCallback): TfgPickerPhoto;
  end;

Второй и третий метод предназначены для быстрого получения фотографии с камеры или из галереи. Первый же метод предназначен для ручной настройки пикера и отлова всех событий (открытие, закрытие, отмена и тд.).

Внимание! Для корректной работы пикера на платформе Android необходимо в настройках проекта включить опцию:

Project -> Options... -> Application -> Entitlement List -> Security File Sharing = True.

Также мы подготовили демонстрационный проект, который позволит вам попробовать эту возможность самостоятельно: "Компоненты" -> "Пикеры" -> "Получение фотографии".

Всем хорошей рабочей недели. Следите за будущими анонсами FGX Native 1.11.0.0.

  • Like 14

8 Comments


Recommended Comments

Ярослав, два вопроса 

1) Вы будете учитывать возможный поворот картинки при фотографировании  ?

2)Будут ли требоваться разрешения на камеру на андроиде ?

Спасибо.

Link to comment
  • Administrators

Добрый день,

  1. После получения фотографии выполняется ее автоматический поворот, чтобы она была в правильной ориентации. Клиенту прилетает изображение с нормализованной ориентацией.
  2. Нет. Это системное приложение. Для его использования разрешение на камеру не требуется.
  • Thanks 1
Link to comment

Тогда, учитывая то, что Вы в любом случае будете вращать фотографию, не сложно ли будет добавить реализацию этого, как метод чего либо, 

Canvas, Bitmap?

Спасибо 

Link to comment
  • Administrators
14.05.2021 в 17:15, Stas сказал:

Тогда, учитывая то, что Вы в любом случае будете вращать фотографию, не сложно ли будет добавить реализацию этого, как метод чего либо, 

Canvas, Bitmap?

Спасибо 

Через релиз добавим.

Link to comment

Добрый вечер, подскажите пожалуйста, есть ли возможность задать свое имя и расположение получаемого фото при использовании PickPhotoFromCamera во время использования? 

В данный момент сохраняет в папку tmp по пути getpublicpatch и имя генерирует из guid, понятно, что можно работать и с тем что есть, но хотелось бы больше возможностей

Link to comment
  • Administrators

Добрый вечер,

23 hours ago, Alex O said:

есть ли возможность задать свое имя и расположение получаемого фото при использовании PickPhotoFromCamera во время использования? 

Нет, на текущий момент такой возможности нет. Можно выполнить ручное переименование файла уже после получения.

  • Thanks 1
Link to comment
2 минуты назад, Yaroslav Brovin сказал:

Добрый вечер,

Нет, на текущий момент такой возможности нет. Можно выполнить ручное переименование файла уже после получения.

спасибо за ответ. так и делаю. 

ЗЫ: заморачиваться и писать обертку не надо)), это я для понимания процесса работы пикера спросил

  • Like 1
Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...