// タイマー割り込みでライブビューを表示するイベントメソッド(画像ファイルのローカル保存 Or FTP) void liveViewTimer_Tick(object sender, EventArgs e) { // Get live view image NikonLiveViewImage image = null; try { //ここんとこ、修正必要かも。_Device.GetLiveViewImage()を呼び出す前にnullかどうか確認してくださいとのこと image = _Device.GetLiveViewImage(); } catch (NikonException) { _LiveViewTimer.Stop(); } if (image != null) { MemoryStream memStream = new MemoryStream(image.JpegBuffer); //確認用に、フォームに撮った写真をフォームに表示 _LiveViewImg = System.Drawing.Image.FromStream(memStream); picBoxPhotImage.Image = _LiveViewImg; #region 条件分岐:ローカルサーバへのファイル保存がONなら if (chkBxFileSave.Checked == true) { try {//ファイルを上書きで保存(ファイル名固定) Console.WriteLine("ライブ画像保存開始"); //非同期書き込み用のファイルストリームを作成 using (FileStream flStream = new FileStream(@"C:\inetpub\wwwroot\images/" + _LiveViewImgFlNm, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, image.JpegBuffer.Length, true)) { //flStream.BeginWriteイベントハンド呼び出し時に使用するステイタスパラメータクラスのインスタンスを作成 using (EvHndParamClass param = new EvHndParamClass()) { //ファイル書き込み終了時のイベントハンドラで実行されるコールバックメソッド内でファイル名を利用すため //そのイベントハンドラに渡すパラメータの、stプロパティにファイル名をセット param.str = _LiveViewImgFlNm; //非同期に書き込み処理を実行する。当該イベント完了時に呼び出されるメソッド【writeImgFileCallback】を設定 flStream.BeginWrite(image.JpegBuffer, 0, image.JpegBuffer.Length, new AsyncCallback(writeImgFileCallback), param); // await writer.WriteAsync(input);//←Frame Work 4.5以上でないと使えない? } } } catch (Exception ex) { Console.WriteLine("err:" + ex.Message + " ライブ画像ファイル書き込み失敗!"); } } #endregion #region 条件分岐: FTPアップロードチェックボックスがONなら if (chkBxFtpUpLoad.Checked == true) { try {//↓は、FTPにて写真アップロードの【場合】です。 WebClient wc = new WebClient(); //アップロード完了時イベントを登録 wc.UploadDataCompleted += (s, ev) => { Console.WriteLine("アップロード完了"); //ファイル名に、"?"+時間を付け加えて送信することで、同名ファイルでも異なるファイルとブラウザに認識させる。 _HubProxy.Invoke("PhotChange", _LiveViewImgFlNm+"?"+DateTime.Now.Millisecond.ToString()).Wait(); }; Uri u = new Uri("ftp://waws-prod-os1-001.ftp.azurewebsites.windows.net/site/wwwroot/images/" + _LiveViewImgFlNm); //認証設定 wc.Credentials = new NetworkCredential(@"picUpSignalR\$picUpSignalR", FtpCredentials); Console.WriteLine("写真画像FTPアップロード開始"); wc.UploadDataAsync(u, image.JpegBuffer); } catch (Exception ex) { MessageBox.Show(ex.ToString()); Console.WriteLine("err:" + ex.Message + " 写真画像FTPアップロード失敗!"); } } #endregion } }
// 撮影画像の準備完了時のイベントメソッド:撮影画像を保存し、保存完了時に【writeImgFileCallback】Hubを呼び出す。 void device_ImageReady(NikonDevice sender, NikonImage image) { using (MemoryStream memStream = new MemoryStream(image.Buffer)) { // 画像データの検証オン _PhotImg = System.Drawing.Image.FromStream(memStream); //保存する写真画像のユーニークなファイル名 //確認用に、フォームに撮った写真をフォームに表示 picBoxPhotImage.Image = _PhotImg; //写真画像保存時のファイル名にユニークな名前を付ける。 string fileUnqNm = "phot" + DateTime.Now.Month.ToString() + "_" + DateTime.Now.Day.ToString() + "_" + DateTime.Now.Hour.ToString() + "_" + DateTime.Now.Minute.ToString() + "_" + DateTime.Now.Second.ToString() + "_" + DateTime.Now.Millisecond.ToString() + ".jpg"; #region 条件分岐:ローカルサーバへのファイル保存がONなら if (chkBxFileSave.Checked == true) { try {//ファイル保存 Console.WriteLine("写真画像保存開始"); //flStream.BeginWriteイベントハンド呼び出し時に使用するステイタスパラメータクラスのインスタンスを作成 using (EvHndParamClass param = new EvHndParamClass()) { // ファイル書き込み終了時のイベントハンドラで実行されるコールバックメソッド内でファイル名を利用すため //そのイベントハンドラに渡すパラメータの、stプロパティにファイル名をセット param.str = fileUnqNm; //非同期書き込み用のファイルストリームを作成 using (FileStream flStream = new FileStream(@"C:\inetpub\wwwroot\images/" + fileUnqNm, FileMode.Create, FileAccess.Write, FileShare.ReadWrite, image.Buffer.Length, true)) { //非同期書き込み、書き込み終了時に呼び出されるメソッド【writeFileCallback】 //flStream.BeginWrite(image.Buffer, 0, image.Buffer.Length, new AsyncCallback(writeImgFileCallback), flStream); flStream.BeginWrite(image.Buffer, 0, image.Buffer.Length, new AsyncCallback(writeImgFileCallback), param); // await writer.WriteAsync(input); } } } catch (Exception ex) { Console.WriteLine("err:" + ex.Message + " 写真画像ファイル書き込み失敗!"); } } #endregion #region 条件分岐: FTPアップロードチェックボックスがONなら if (chkBxFtpUpLoad.Checked == true) { try {//↓は、FTPにて写真アップロードの【場合】です。 WebClient wc = new WebClient(); //アップロード完了時イベントを登録 wc.UploadDataCompleted += (s, e) => { Console.WriteLine("アップロード完了"); _HubProxy.Invoke("PhotChange", fileUnqNm).Wait(); }; //Uri u = new Uri("" + fileUnqNm); Uri u = new Uri("ftp://waws-prod-os1-001.ftp.azurewebsites.windows.net/site/wwwroot/images/" + fileUnqNm); //認証設定 // wc.Credentials = new NetworkCredential(@"", ""); wc.Credentials = new NetworkCredential(@"picUpSignalR\$picUpSignalR", FtpCredentials); Console.WriteLine("写真画像FTPアップロード開始"); wc.UploadDataAsync(u, image.Buffer); } catch (Exception ex) { //MessageBox.Show(ex.ToString()); Console.WriteLine("err:" + ex.Message + " 写真画像FTPアップロード失敗!"); } } #endregion } }