だらだらやるよ。

こげつのIT技術メモ

SIP起動中にボタンを押したときの処理

微妙に更新間隔あいてしまった。最近はあまりコード書かない仕事しているせいで技術ネタのストックがたまらないですね。。。
まあコード書かない仕事にも少しなれてきたので、最近は家で少しずつコード書いてます。早く公開できるようにがんばりたい。


というわけでちょっと入力フォーム作ってたときに困ったんですが、
SIPが表示されるじゃないですか、ほんで入力中にアプリケーションバーの決定ボタンとか押して処理を確定させようとするときに、
何も考えずにやると入力中の文字が確定される前に処理が走っちゃうんですよね。
というわけでアプリケーションバーのイベントには
this.Focus()とか書いておくといいらしいです。解決した!

しつしつ来週からです。

やったー踏子個展だあ、前回と場所は違うので注意ですね。
とはいえ前回はだいたい1年くらい前か。なつかしい。
2010-11-16 - だらだらやるよ。



というわけでしつしつ開催です。
exhibit. | c355p001

日程:2011年10月10日(月)〜10月17日(月)
時間:11時00分〜18時00分(土・日曜は17時まで)
会場:乙画廊/〒530-0047 大阪市北区西天満2-8-1大江ビルヂング101

二度目の個展は淀屋橋の乙画廊さんにて、またも大阪です。
初日は16時よりオープニングパーティー、ぶらりお立ち寄りくださると嬉しいです。

だそうです。僕はちょっと行けないかな。。。うう、ざんねん。

ラジオを見に行ってきた。

先週のことなのですが、ななふぉの人に突然さそわれて見学に行ってきました。
オールナイトニッポンの、app10という番組なのですがなんとスマートフォンをテーマにしたラジオ番組なのですよ。
ustとかニコ生もやっててすごい!最近では当たり前なのかしら。。。
ワイモバイルのiPhoneの料金と2年総額・キャンペーン情報の総まとめ - ワイモバイルなら、iPhoneはもちろん、Androidスマホも圧倒的に安い!キャリアでは廃れつつある端末購入サポート割引でお得に最新スマホを購入!他社との料金比較やキャンペーンなどワイモバイルを徹底解剖していきます!

僕も当日まで知らなくてすごくびっくりしました。。。
やあ、スマートフォンの勢いすごいですね。
Twitterハッシュタグを使って交流を促したりと面白いなーと思いました。
僕も現場で見ながらポストしてたら公式に補足されたりと楽しめました。


その日はWindowsPhone特集としてMS,KDDI,富士通東芝と3社そろって出演と言う
30分の枠じゃ絶対たりないだろうっていうゲストがきてて、
案の定倍でも足りないんじゃないかっていう感じだったのですが(別の機会でもいいからしゃべってほしいなあ)、
ラジオ局に入ることとか普段ないので、とても楽しかったです。
当日のust見つけた!これこれ!
http://www.ustream.tv/recorded/17158666


撮った写真の一部。
ホワイトボードでどういう人が座ってるとか教えてもらった!やさしい!!


カメラを使う。

基本的なメソッドだけ。

とりあえずxaml、このrectangleのなかにプレビューが表示される感じ。

            <Rectangle Width="300" Height="200" 
                   HorizontalAlignment="Left" 
                   x:Name="viewfinderContainer">

                <Rectangle.Fill>
                    <VideoBrush x:Name="viewfinderBrush" />
                </Rectangle.Fill>
            </Rectangle>

初期化と実行開始。

PhotoCamera cam = new Microsoft.Devices.PhotoCamera();
cam.Initialized += (p1,p2) => {
  //初期化終了時イベント。これが実行されたあとでないと、Flashなどの設定はできない。

  //flashの設定
  cam.FlashMode = FlashMode.Off;
  //Offは大丈夫だが他のモードを使う場合はデバイスが対応するか確認するコードをいれること。
  if(cam.IsFlashModeSupported(FlashMode.Auto)){
    cam.FlashMode = FlashMode.Auto;
  }
  //画像解像度設定
  cam.Resolution = cam.AvailableResolutions.OrderByDescending(x => x.Height).FirstOrDefault();//一番でかいの
}
viewfinderBrush.SetSource(cam);//リアルタイムレンダリングされる。らくちん。

写真を撮る。CaptureImageメソッドをたたくだけ。

//これだけ。
cam.CaptureImageAvailable += (p1,p2)=>{
//保存処理。
//p2.ImageStreamをお好きなように
};            
cam.CaptureImage();

//オートフォーカスが必要ならこう。
cam.AutoFocusCompleted += (p1,p2)=>{
  cam.CaptureImage();
};
cam.Focuse();

//上記方法ではIS12Tでシャッタ音がなる。
//消す方法は未調査
//鳴らさない方法としてはコントロールのキャプチャを使う方法がある。
var wb = new WriteableBitmap(viewfinderContainer, null);
//あとはWritaebleBItmapをお好きなように

画像の保存

//イメージストリームを保存
Microsoft.Xna.Framework.Media.MediaLibrary library = new MediaLibrary();
library.SavePictureToCameraRoll(fileName, e.ImageStream);//通常はCaptureImageイベントのArgs

//writeableBitmapを保存
//一度IsolatedStorageに保存する
String tempJPEG = "TempJPEG";
var myStore = IsolatedStorageFile.GetUserStoreForApplication();
if (myStore.FileExists(tempJPEG)) {
  myStore.DeleteFile(tempJPEG);
}
IsolatedStorageFileStream myFileStream = myStore.CreateFile(tempJPEG);
Extensions.SaveJpeg(wb, myFileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
myFileStream.Close();

// 分離ストレージからPicturesHubにコピーする。
MediaLibrary library = new MediaLibrary();
myFileStream = myStore.OpenFile(tempJPEG, FileMode.Open, FileAccess.Read);
library.SavePicture(fileName, myFileStream);
myFileStream.Close();

おまけ。シャッターボタン関連のイベントはこの辺なので、標準と同じような動きするならあわせたほうがよさそうですね。

CameraButtons.ShutterKeyHalfPressed += OnButtonHalfPress;//普通ならAF開始
CameraButtons.ShutterKeyPressed += OnButtonFullPress;//普通ならシャッター
CameraButtons.ShutterKeyReleased += OnButtonRelease;//普通ならAF中止