Jump to content

Анонс 1.11.0.0 и TfgPhotoPicker


Yaroslav Brovin

819 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

5 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
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...