Jump to content

Stas

Active subscription
  • Content Count

    132
  • Joined

  • Last visited

  • Days Won

    9

Stas last won the day on February 20

Stas had the most liked content!

Community Reputation

70 Excellent

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Хотелось бы понимать ограничения, а именно до каких пор "упрощенный HTML формат"
  2. Здравствуйте. Ни в одной демке использования не нашел. У меня не заработало ни разу. Правда, интересно
  3. Здравствуйте У меня ни разу не получилось, чтобы это событие как-то себя проявило. Что я делаю не так ? Спасибо
  4. Здравствуйте Решается, в большинстве случаев следующим методом 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
  5. Сервисы, я так понимаю забыты.
  6. Это не проблема. Проблема, это то, что нельзя обойти, это так, мелочь. Вначале грешил на эмулятор.
  7. Добрый день, обнаружил интересное поведение приложения на старых устройствах с Андроид 6 (Nexus 2013) в случае нахождения на форме NavigationBar, а также использования на ней дочерней формы в качестве фрейма. В этом легко убедиться использовав стандартный пример из поставки (Формы в качестве фрейма) 1) Добавьте на главную форму NavigationBar с кнопочкой 2) Запустите приложение и переключайте фреймы путем нажатия на кнопки внизу 3) Вы обнаружите, что кнопка на навигаторе скоро исчезнет. Определил, что это происходит только при вызове метода дочернего фрейма FActiveFrame.show() Если FActiveFrame.Visible:=true, то работает адекватно. Спасибо. Хотелось бы услышать мнение начальника транспортного цеха Ярослава.
  8. По крайне мере, я старался.
  9. Коллекция пополнилась Вашим . Я думаю, у все разные диалоги.
  10. А что такое, диалог по умолчанию? Я про него ничего не знаю, видел разные
  11. Этот classes.dex должен быть в deploy
  12. Сделал очень ректально. Но уже работает и не падает (я надеюсь) Хотел бы комментарии Ярослава. (Касательно таймеров) Спасибо BarcodeDetector.rar
  13. Уважаемые друзья, прежде всего хочу попросить у вас прощения, что не успел привести это в божеский вид, потому даю только наметки. Возможно у кого-то возникнут более разумные идеи , чтобы это работало как следует. Итак начинаем Прежде всего нам понадобится 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 Благодарю за внимание, и прошу прощения, что так сумбурно.
  14. Пытаюсь привести в божеский вид Штрих-код киевской примы без фильтра я уже получил, осталось добиться нормальной остановки камеры Падаем-с. З.ы используется Google vision api
  15. Ну, что могу сказать, получилось. Библиотека Ярослава к этому готова Если это необходимо, постараюсь сегодня выложить пример.
×
×
  • Create New...