Konyのカメラのオーバーレイ機能について

#目次
1. はじめに
2. 実装方法
3. まとめ
4. 参考

#はじめに
アプリ上で写真をとる際に様々なボタンがあるのを見かけませんか？
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/1a2c326c-0f05-50dc-0e8c-6387cf92a657.png" width=20%>
※画像はInstergramの撮影時画面

今回はKonyのカメラのオーバーレイ機能についてご紹介します。

#実装方法
####**①画面の作成**
2つの画面を作成します。
1つはメイン画面、もう1つはカメラが起動した時にオーバーレイさせたい画面です。

◆メイン画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/dab91432-c470-fec2-f478-bd0f366bfc54.png)
下の「撮影する」ボタンをタップすると、カメラが起動します。
撮影またはアルバムから写真を選択し、この画面に戻った時に真ん中に画像が表示されます。

◆オーバーレイ画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/c0560db7-5ccc-a6da-6c86-285f8703caa8.png)
右上のボタンをタップすると、デバイスのアルバムが開かれます。

####**②オーバーレイ機能の設定**
1) メイン画面のカメラウィジェット（`cameraTest`）をクリック
2) 右のPropertiesからCameraをクリック
3) Overlayをクリック

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/fd5d53ca-8c94-5828-72c0-9dc28b040ed1.png" width=50%>

4) オーバーレイさせる画面を選択（iPhone,Android）
Androidの場合は、この画面で適用したいSkinやTextを設定できます
5) OKをクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/edc120e9-bb4d-703b-1955-1b872946faef.png)

6) Enable Overlayをクリック
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/28af8563-9425-c87e-01e3-d7e9459e34fa.png" width=50%>

7) iPhoneおよびAndroidにチェックを入れ、Valueのtrueにもチェックを入れ、OKをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/63796c7b-cfa2-4633-35f1-571363334111.png)

8) iPhoneのNative UIをオフに設定
:warning:iPhoneを使用する時は必ずネイティブUIを`Off`にする必要があります。`On`に設定すると、オーバーレイが適用されず、デフォルトで表示されるカメラ画面になります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/bcb5d490-0dc4-8420-afed-ae838cb21d1d.png" width=50%>

####**③コーディング**
2つの画面のコーディングを行います。

◆メイン画面

```frmTestController.js
define({

  // 撮影した時
  onCapture: function(eventobject){
    var rawbytes = eventobject.rawBytes;
    this.view.imgTest.rawBytes = rawbytes;
    var ntf = new kony.mvc.Navigation("frmTest");
    ntf.navigate();
  },
  
  // 撮影後、撮影した画像を表示
  onNavigate: function(params){
    this.view.cameraTest.closeCamera();
    try{
      if(params){
        this.view.imgTest.rawBytes = params.rawBytes;
      } else {
        return;
      }
    } catch(error) {
      alert("Error: ", error);
    }
  }
});
```

**closeCamera**：カメラを閉じることができる。Androidではオーバーレイの設定が有効になっている時のみ、適用可となる。

◆オーバーレイ画面

```frmOverlayController.js
define({
  
  // アルバムを開いた時
  onOpenPhoneGallery: function(){
    kony.application.requestPermission(kony.os.WRITE_EXTERNAL_STORAGE, function(){
      var querycontext = {
        mimeType: "image/*"
      };
      kony.phone.openMediaGallery(function(rawBytes, permStatus, mimeType){
        if(rawBytes){
          var params = {
            rawBytes: rawBytes
          };
          var ntf = new kony.mvc.Navigation("frmTest");
          ntf.navigate(params);
        } else if(permStatus === kony.application.PERMISSION_DENIED){
          alert("Permission denied to access the photo gallery");
        }
      }, querycontext);
    });
  }
});
```

**kony.application.requestPermission**：デバイス内のファイルへのアクセス許可を要求

こちらについては以下の記事を参考にしてください。
・Konyでデバイスのメディアを参照および共有する方法【iOS】【Android】
https://qiita.com/Kony_Team/items/72bcbedcda03d7f4bb1e

####**④Actionの紐付け**
関数の準備ができたらActionと紐づけていきます。

◆メイン画面  
`cameraTest`(「撮影する」ボタン)を選択 > `Action`タブをクリック > `onCapture`のEditをクリック > Action(`onCapture`)紐づけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/0702e1b1-c2bf-fc56-e2f9-9ce2f1ead019.png)

◆オーバーレイ画面
`flxGallery`(「アルバム」ボタン)を選択 > `Action`タブをクリック > `onClick`のEditをクリック > Action(`onOpenPhoneGallery`)紐づけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592264/c4ec186d-0277-ee10-4352-10a4e663e3de.png)

実際にどうなるかみていきましょう！

####**⑤実装の確認**
<blockquote class="twitter-tweet"><p lang="und" dir="ltr"><a href="https://t.co/WMy0es5cie">pic.twitter.com/WMy0es5cie</a></p>&mdash; Kony (@Kony12763790) <a href="https://twitter.com/Kony12763790/status/1362672945512910851?ref_src=twsrc%5Etfw">February 19, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

カメラを起動した時にオーバーレイ画面が表示されていましたね！

#まとめ
今回は、カメラのオーバーレイ機能について説明しました。
みなさんもぜひ活用してみてくださいね:wave:

#参考
Camera Widget：
https://docs.kony.com/konylibrary/visualizer/viz_widget_prog_guide/content/Camera.htm

Konyでデバイスのメディアを参照および共有する方法【iOS】【Android】：
https://qiita.com/Kony_Team/items/72bcbedcda03d7f4bb1e