One Note Jam

S60開発・PathInfoクラスで各種フォルダのパスを取得する (2006-03-19)

S60端末では、各種ファイルを格納するための標準のパスが定義されています。例えば、702NKにおいて画像ファイルを格納するパスとしては、本体メモリの場合は"C:\Nokia\Images\"が、メモリーカードの場合は"E:\Images\"が標準のパスとなります。内蔵アプリケーションの「ギャラリー」では、これらのパス以下に存在する画像ファイルが画像リストに表示されます。

これらの定義されている標準のパスを取得するためのAPIとして、PathInfoクラスが提供されています。使い方は非常に簡単で、static関数として用意されているAPIを呼ぶと、パス文字列がconst TDesC&型の戻り値で取得できます。

具体的に取得できる値は以下のようになります(702NKの場合)。それぞれのAPIが何のパスを表しているのかについては、API名を見ればだいたいわかると思います。

PathInfo API戻り値
RomRootPath()Z:\Nokia\
PhoneMemoryRootPath()C:\Nokia\
MemoryCardRootPath()E:\
GamesPath()Games\
InstallsPath()Installs\
OthersPath()Others\
VideosPath()Videos\
ImagesPath()Images\
PicturesPath()Images\Pictures\
GmsPicturesPath()Images\Pictures\
MmsBackgroundImagesPath()Images\Backgrounds\
PresenceLogosPath()Images\Presence\
SoundsPath()Sounds\
DigitalSoundsPath()Sounds\Digital\
SimpleSoundsPath()Sounds\Simple\
ImagesThumbnailPath()_PAlbTN\
MemoryCardContactsPath()E:\Others\Contacts\

ただし、PathInfoクラスがサポートされているのはS60 2nd Edition以降となります。以前のS60端末に対応したアプリケーションを作成する場合には使用できませんのでご注意ください。

posted at 2006-03-19 | Permalink

「GetPixels」開発途中版 (2006-03-13)

お蔵出し

以前、S60プラットフォーム向けのスクリーンキャプチャツール「GetPixels」を開発していたのですが、ここしばらくの多忙のため、塩漬けにしたまま3ヶ月以上が過ぎてしまいました。あらかた動く状態まで作りこんだものの、最後の仕上げの段階で放置していました。

このままお蔵入りにするのももったいないので、開発途中ですが公開しておきます。ソースコードも置いておきますので、参考にしたい方はどうぞ(コメントはほとんどありませんが……)。

特徴など

主な特徴は以下のとおりです。

  • 4種類の画像フォーマットに対応(PNG・BMP・MBM・JPEG)
    • 画像フォーマットごとに各種設定可能
  • 画像ファイル保存場所のカスタマイズ可能(ドライブ・ディレクトリ名・ファイル名)
  • キャプチャトリガとするキーのカスタマイズ可能
  • 外部イベント(充電開始)をトリガにしてキャプチャ可能
  • ディレイ時間設定可能
  • グローバルノートやバイブレーションによるキャプチャ完了通知可能

目新しい機能としては「充電開始をトリガにしたキャプチャ」でしょうか。キー入力をトリガにしてキャプチャしようとすると、高負荷なゲームなどの動作中だとなかなかキャプチャができないことが多々あります(他プロセスにCPU時間がまわらないため?)。ところが、そんな高負荷な状態でも、充電を開始する際には高いプライオリティで『充電中です』という表示が行われます。充電開始をトリガにしてキャプチャすることで、高負荷アプリケーションの隙を突いてキャプチャを行おうという魂胆です。

ただ、実際には微妙なタイミングに左右されるようで、『充電中です』と表示された画面がキャプチャされてしまうこともしばしば。なかなか思うようにはいかないものです。

未完成な部分もいろいろあります。

設定リストのスクロールバー(?)が表示されない
なぜ表示されないのか理由がよくわかりません。CCoeControl::SetMopParent()あたりの使い方が間違っている?
コメント情報を含むJPEGファイルの生成時にメモリリークしている
JPEGファイルを生成する際に、任意のコメント情報を埋めこめられるように設定できますが、その際にメモリーリークが発生している模様。原因もだいたい分かってはいますが、クラスの設計ミスが原因なので、直すのが面倒くさくて放置中。
画像ファイル名の指定方法が難しい
キャプチャ時の日時を元にして画像ファイル名を決めるようにしているのですが、カスタマイズの自由度を上げようとして四苦八苦した結果、「TTime::FormatL()の引数となる文字列をユーザー側で直接指定する」というひどいI/Fにしてしまいました。
アイコンがない
面倒なので作っていません。
動作が不安定
これが一番大きな問題で、高負荷時にキャプチャする際にどうも動作が怪しい。特にゲームなどでは、ものによってはキャプチャ時に端末の再起動がかかったりすることも。この件については原因不明です……。

スクリーンショット

以下のスクリーンショットは、当然ですが「GetPixels」にてキャプチャした画像です。

GetPixels スクリーンショット1 GetPixels スクリーンショット2 メイン画面には、最後にキャプチャした画像が表示されます。

GetPixels スクリーンショット3 GetPixels スクリーンショット4 各種設定画面です。

GetPixels スクリーンショット5 GetPixels スクリーンショット6 こちらは画像パラメータの設定画面です。

GetPixels スクリーンショット7 実際にキャプチャされた画像はこんな感じ。

GetPixels スクリーンショット8 カメラのファインダ画面もこのとおり。

posted at 2006-03-13 | Permalink

© 2004-2008 ENDO