jsWaffle質問掲示板(雑談やTips歓迎)

jsWaffleについて質問する掲示板です。(雑談や発見したTipsの投稿も大歓迎です!)
[一覧へ] > (@96) [普通] [質問]
@96■ (#302) スナップショットのファイル名 - 初心者 (2012-02-29 23:25) /普通 質問
【質問事項】どのような問題ですか?

スナップショットのファイル名を現在の時間にしたりするのは可能でしょうか?
また、連写なども可能でしょうか?

(#305) Javascriptの時刻を取得する関数 - ミラクルくまちゃん (2012-03-08 21:39) /普通 返信
すみません。
今、帰宅途中にIS03で、書いています。

//今日の日時を表示 
var date = new Date();
という関数を使い、現在時刻を取得できます。

具体的な使い方は、下記のページなどを参考にしてください。
http://www.hoge256.net/2007/08/64.html

取得した時刻をファイル名に指定すると、時刻で保存できます。
時刻の形式を加工する必要があるかもしれません。

数字を文字列に変換するとか…

それから、連写は、シャッタースピードをさわると思いますので、カメラの機能にアクセスするプラグインとか作った方がよいかもしれません。
インデ

(#311) こんにちわ - 初心者 (2012-03-15 19:21) /高 返信
ご指摘の通り時刻を設定することができましたが
根本的な質問ですが自分が作成したものではアプリ画面しか撮影できません。

Android本体のホーム画面に遷移した場合でも時間差などで撮影していますが
アプリのスナップショットしか撮影できないのはなぜでしょうか?
出来れば別のアプリやHOME画面などを撮影できると便利なのですが・・・
詳しい方出来ればご教授ください。


自分が書いたスナップショットという書き方が悪かったですね。
カメラ機能ではなくて画面をキャプチャする機能の事です。

サンプルソースでいうと

  <h2>Snapshot</h2>
  <div class="buttons">
    <button onclick="showSnapshot()">Snapshot!!</button>
  </div>
  <script type="text/javascript">
    function showSnapshot() {
      droid.vibrate();
      var path = "file:///sdcard/test.png";
      droid.snapshotToFile(path, "png");
      setTimeout(
        function () {
          if (droid.fileExists(path)) {
            droid.startIntent(path);
          } else {
            alert("保存失敗!!");
          }
        }
      ,500);
    }
  </script>


この機能です。

やはりABasicPlugin側の
  /**
   * capture screen and save to file
   * @param filename
   * @param format png or jpeg
   * @return
   */
  public boolean snapshotToFile(String filename, String format) {
    // snapshot
    Bitmap bmp = null;
    try {
      webview.setDrawingCacheEnabled(true);
      bmp = Bitmap.createBitmap(webview.getDrawingCache());
      webview.setDrawingCacheEnabled(false);
    } catch (Exception e) {
      log_error("snapshot failed: " + e.getMessage());
      return false;
    }
    if (bmp == null) {
      log_error("snapshot failed: bmp = null");
      return false;
    }
    // save to file
    Bitmap.CompressFormat fmt = Bitmap.CompressFormat.PNG;
    format = format.toLowerCase();
    if (format == "jpeg" || format == "image/jpeg") {
      fmt = Bitmap.CompressFormat.JPEG;
    }
    try {
      byte[] w = bmp2data(bmp, fmt, 80/*middle*/);
      boolean b = writeDataFile(filename, w);
      bmp.recycle(); // recycle !!
      return b;
    } catch (Exception e) {
      log_error("snapshot failed:" + e.getMessage());
      return false;
    }
  }
   private static byte[] bmp2data(Bitmap src, Bitmap.CompressFormat format, int quality) {
     ByteArrayOutputStream os=new ByteArrayOutputStream();
     src.compress(format,quality,os);
     return os.toByteArray();
   }
   private boolean writeDataFile(String filename, byte[] w) throws Exception {
     OutputStream out = WaffleUtils.getOutputStream(filename, waffle_activity);
     if (out == null) throw new Exception("FileOpenError:" + filename);
     try {
       out.write(w, 0, w.length);
       out.close();
       return true;
     } catch (Exception e) {
       out.close();
     }
     return false;
   }


この部分の改造が必要なのでしょうか?

(#312) 常駐アプリ - ミラクルくまちゃん (2012-03-16 09:04) /普通 質問
こんにちは。

他のアプリやHOME画面のスナップショットを撮影しようとする場合は、常駐のアプリを作る必要があると思います。

スナップショットを撮影する画面(Activity)を指定すると、可能だと思います。

jswaffleは、ウェブページの技術を使いアプリの中にあるブラウザで表示できるエリアを使ってアプリの動きや表示を行っています。

そのため、プラグインのソースの webview

関連の当たりを実際に表示されているActivityに対応させる必要があると思います。

Activityを指定する方法は、調べないといけないですが、アプリの動きは、下記のページが参考になると思います。
http://www.atmarkit.co.jp/fsmart/articles/android07/android07_1.html



(#313) 返信有難う御座います - 初心者 (2012-03-16 17:37) /普通 質問
やはり
 webview.setDrawingCacheEnabled(true);
 bmp = Bitmap.createBitmap(webview.getDrawingCache());
 webview.setDrawingCacheEnabled(false);

このへんを含めた調整が必要ということですね。
私が調べた範囲では、下記のような事例があるそうです。

http://groups.google.com/group/android-group-japan/browse_thread/thread/280b0d2ec7425626/057b657b96521170

確実にやるにはフレームバッファを使用する方がいいそうですが
root取得が必要になるそうです。

(#302)へ返信する:

名前
タイトル
本文
困った度
状態
確認キー お手数ですが、いたずら防止のために、半角数字で「8932」と入力してください。
編集キー 編集時に使うキーを入力(省略可能)
添付ファイル 画像ファイル(最大300KB)を添付可能