Камера и iOS

NB: Обновлённое решение тут
Всем хорош Qt прям до безумия...один код все платформы...если бы не iOS который на iphone я бы был рад и не занимался хернёй...однако приходится...итак у нас проблема с QML модулем Camera и она только в iOS...
Камера и iOS

Проблема, даже 2 - первая: в iOS не работает функция searchAndLock(); от слова совсем...приходится городить костыли
Код QML:
  1. camera.imageCapture.capture();
Это не самая страшная проблема, далее начинается веселье. iPhone у нас умный, одного говорят даже председателем колхоза назначили, и ему вздумалось поворачивать картинки с камеры, при сохранении на 90 градусов...будем исправлять....
Итак, пункт первый, пишем обёртку для поворота изображения:
Код CPP-QT:
  1. void Adapter::rotateImage(QString url)
  2. {
  3. #if defined(Q_OS_IOS)
  4. QPixmap* pixmap = new QPixmap(url);
  5. QTransform transform;
  6. QTransform trans = transform.rotate(90);
  7. QPixmap *transPixmap = new QPixmap(pixmap->transformed(trans));
  8. transPixmap->save(url, "jpg", 100);
  9. #endif
  10. emit imageRotate("file://"+url);
  11. }
Если не знаете как передавать в QML сигнал с параметром то делается это просто - в хедаре прописываем:

Код CPP-QT:
  1. signals:
  2. void imageRotate(QString preview);
Далее мы увидим где этот preview обнаружится :)

Данный код просто поворачивает картинку, и возвращает её урл через сигнал, только для iOS - у остальных всё норм. Далее идём в QML и там меняем в ImageCapture:
Код QML:
  1. onImageSaved: {
  2. adapter.rotateImage(path);
  3. }
Думаю не нужно объяснять как перекинуть C++ функцию в QML. Если нужно - пишите в комменты.
То есть, я сказал отправить URL картинки в адаптер, если нужно он его перевернёт. Далее, у нас срабатывает сигнал imageRotate и надо его отловить:
Код QML:
  1. target: adapter
  2. onImageRotate: {
  3. preview_img.src = preview;
  4. }
  5. }
Вот и тот самый preview который мы объявляли в сигнале.
Вот в принципе и вся работа...
Есть вопросы? Жду комментариев.
Комментарии (0)

Нет комментариев. Ваш будет первым!

Copyright 2016-2019 NeoChapay