Jump to content

Stas

Members
  • Posts

    536
  • Joined

  • Last visited

  • Days Won

    75

Posts posted by Stas

  1. Здравствуйте

    У Ярослава в поставке есть файл Android.Api.Media.pas. Там реализован класс TJMediaPlayer.

    Один из конструкторов которого

        class function create(const AArg0: TJContext; const AArg1: TJUri): TJMediaPlayer; overload;

    Так же в этом классе есть методы

        procedure start;
        procedure stop;

    Я думаю, Вам стоит посмотреть в этом направлении.

    Спасибо

     

    • Like 1
  2. Ну смотрите, если у вас плоский список, то каждому элементу списка будет соответствовать либо кусок json, либо запись в датасет.

    Потому в OnBindItem Вы можете либо выгребать объект из json , либо позиционироваться на определенную позицию датасета.

  3. Здравствуйте, обнаружил странную особенность 

    Размер фотографий, сделанных при помощи камеры, не превышает (в моем случае ) 1920*1080.

    Сердце мне подсказывает, что это разрешение моего телефона.

    Фотографии сделанные средствами телефона не подвержены этому недостатку.

    Спасибо.

  4. Здравствуйте. Ошибка в следующем.

    Предположим у нас два проекта project1 и project2 с разными цветовыми гаммами

    Если открыть первый проект, закрыть его, и открыть второй, то волшебным образом сохраняется тема первого проекта.

    При переоткрытии дельфи, все встает на свои места.

    Собственно вот

    Спасибо.

  5. Здравствуйте

    Решается, в большинстве случаев следующим методом

    uses AndroidApi.Jni,Java.Bridge,Java.Bridge.Helpers,FGX.Canvas.Android,Android.Api.Javatypes,Android.Api.ActivityAndView, Android.Api.Exif;
    function RotateBitmap(B:TfgBitmap;Sz:Integer):TfgBitmap;
    var M:TJMatrix;
        BA,BA1:TJBitmap;
    begin
    BA:=TfgAndroidBitmapHandle(B.Handle).NativeBitmap;
    M:=TJMatrix.Create;
    m.postRotate(Sz);
    BA1:=TJBitmap.createBitmap(BA,0,0,BA.getWidth,BA.getHeight,m,true);
    Result:=TfgBitmap.CreateFromNativeBitmap(BA1);
    end;
    function PrepareBitmapFromFile(FileName:String):TfgBitmap;
    var E:TJExifInterface;
        Orientation:Integer;
    begin
      E:=TJExifInterface.Create(FileName);
      Orientation:=E.getAttributeInt(TJExifInterface.TAG_ORIENTATION,TJExifInterface.ORIENTATION_UNDEFINED);
      Result:=TfgBitmap.CreateFromFile(FileName);
      if Orientation=TJExifInterface.ORIENTATION_ROTATE_180
      then
       Result:=RotateBitmap(Result,180)
      else
      if Orientation=TJExifInterface.ORIENTATION_ROTATE_90
      then
       Result:=RotateBitmap(Result,90)
      else
      if Orientation=TJExifInterface.ORIENTATION_ROTATE_270
      then
       Result:=RotateBitmap(Result,270);
    
    
    end;

    Извините за небрежность кода

    Android.Api.Exif.pas

  6. Добрый день, обнаружил интересное поведение приложения на старых устройствах с Андроид 6 (Nexus 2013) в случае нахождения на форме NavigationBar,  а также использования на ней дочерней  формы в качестве фрейма.

    В этом легко убедиться использовав стандартный пример из поставки (Формы в качестве фрейма)

    1) Добавьте на главную форму NavigationBar с кнопочкой 

    2) Запустите приложение и переключайте фреймы путем нажатия на кнопки внизу

    3) Вы обнаружите, что кнопка на навигаторе скоро исчезнет.

    Определил, что это происходит только при вызове метода дочернего фрейма FActiveFrame.show()

    Если FActiveFrame.Visible:=true, то  работает адекватно.

    Спасибо. 

    Хотелось бы услышать мнение начальника транспортного цеха  Ярослава.

  7. Уважаемые друзья, прежде всего хочу попросить у вас прощения, что не успел привести это в божеский вид, потому даю только наметки.

    Возможно у кого-то возникнут более разумные идеи , чтобы это работало как следует.

    Итак начинаем 

    Прежде всего нам понадобится 

    1) Кнопка для начала сканирования

    2)Мемо для отображения результатов

    3) TfgVideoControl для показа действий с камерой.

    4) Два маленьких литра коньяка

    Мы создаем имплементацию интерфейса 

    type
    TDetector_Processor = class(TfgAndroidListener<TfgAndroidControl>,JDetector_Processor)
    public
        procedure receiveDetections(const AArg0: TJDetector_Detections);
        procedure release;
      end;
    
    
    procedure TDetector_Processor.receiveDetections(
      const AArg0: TJDetector_Detections);
    var J:TJSparseArray;
        B:TJBarcode;
        D:TDetector_Processor;
    begin
     J:=AArg0.getDetectedItems;
     if (J.size<>0)  then
     begin
      D:=Self;
      B:=TJBarcode.Wrap(J.valueAt(0));
      TThread.Synchronize(nil,procedure
      begin
       FormMain.fgMemo1.Lines.Text:=JStringToString(B.displayValue);
    
     end);
    
    
     end;
    
    end;
    
    procedure TDetector_Processor.release;
    begin
     ;
    end;

    Собственно говоря, он отвечает за распознавание штрих-кода.

    Далее при создании формы, нам необходимо создать этот объект

     

    processor:=TDetector_Processor.Create(TfgAndroidControl(TfgAndroidControlHandle(fgMemo1.Handle).NativeControl)); //Я не знаю, почему я так сделал

    На кнопку мы вешаем следующий код

    //Мы просим разрешения сканировать, и при получении оного пытаемся это делать.

    TfgPermissionService.RequestPermissionsAsync(['android.permission.CAMERA', 'android.permission.WRITE_EXTERNAL_STORAGE'],
        procedure(const APermissionInfo: TArray<TfgPermissionInfo>) begin
          case APermissionInfo[0].CheckResult of
            TPermissionCheckResult.Granted:
             begin
              DoScan;
             end
    
            else
              TfgToast.Show('Camera permission is not granted. Cannot scan barcode.', TfgToastDuration.Long);
          end;
        end);

    Теперь собственно, сама процедура

    
    procedure TFormMain.doScan;
    begin
     detector:=TJBarcodeDetector_Builder.Create(TfgAndroidHelper.Context).setBarcodeFormats(TJBarcode.ALL_FORMATS).build();
     detector.setProcessor(processor);
     cameraSource:=TJCameraSource_Builder.Create(TfgAndroidHelper.Context,detector).
     setRequestedPreviewSize(1920, 1080).setAutoFocusEnabled(true).build();
      cameraSource.start(
           TfgAndroidVideoControl(TfgAndroidControlHandle(fgVideoControl1.Handle).NativeControl).VideoView.getHolder());
    
    end;
    

    Конечно про используемые модули.

    uses ...,Java.Bridge,FGX.Animation, FGX.Dialogs, FGX.Log,FGX.Helpers.Android,FGX.Image.Android,FGX.VideoControl.Android,Android.Api.ActivityAndView,FGX.Permissions,FGX.Toasts,

    И в interface 

    Android.Api.PlayServices.Vision

    Благодарю за внимание, и прошу прощения, что так сумбурно.

    • Like 1
  8. 2 часа назад, Cinemaizer сказал:

    Было бы очень здорово ознакомиться с примером! Респект!

    Пытаюсь привести в божеский вид

    Штрих-код киевской примы без фильтра я уже получил, осталось добиться нормальной остановки камеры

    Падаем-с.

    З.ы используется Google vision api

×
×
  • Create New...