Windowsデスクトップアプリを作ってみる

Windows上で簡単なカメラのアプリを作る

  • Visual Studio Community 2022 Version 17.7.3
  • タブレット付属のカメラで撮る簡単なアプリ

基本的な仕様

  • Visual Studioで開発
  • ウィンドー内に「撮る」と「連写」のボタンがある
  • Windowsタブレットについているカメラからの映像を表示するエリアを持つ
  • カメラからの映像を保存する際のファイル名は日時をミリ秒までの文字列にする。
    • ファイルのハッシュをファイル名の最後につけるようにする
  • 保存する画像はpngフォーマット
  • 「撮る」のボタンを押すと1枚、保存
  • 「連写」ボタンを押すと20秒間、カメラからの映像を1フレームごと1枚の画像データとして保存していく。
    • この時、負荷は高くなるが、負荷テストの意味も兼ねているので許容する
  • 現在のカメラからの入力をウィンドー内に表示する
    • このGUI部分は System.Windows.Forms と WindowsFormsIntegration を用いて実装する
  • UIとロジックのコードを分離するようにする
  • エラーハンドリングのコードは持つようにする
  • プロジェクトはWindows FormsではなくWPFで実装

あったら良いなという機能

  • ディスク上でデータが断片化しないように複数のファイルがシーケンシャルに書き込まれるようにする
  • 音声トリガー撮影

VisualStudioでプロジェクトを作製

  • C# WPFアプリケーション でプロジェクトを作製
  • フレームワークは[.NET 7.0(標準用語のサポート)]を選択

開発中のメモ

EMGU.CVというC#でOpenCVを利用するためのラッパーをいれようとすると下記のエラーが出た。

パッケージ ‘Emgu.runtime.windows.msvc.rt.arm64 19.35.32217.1’ をインストールできませんでした。このパッケージを ‘.NETFramework,Version=v4.7.2’ を対象とするプロジェクトにインストールしようとしていますが、そのフレームワークと互換性があるアセンブリ参照またはコンテンツ ファイルがパッケージに含まれていません。詳細については、パッケージの作成者に問い合わせてください。

古いバージョンのC#のプロジェクトが作れるようにVisualStudio installerから .Net framework 4.6.2-4.7.1開発ツール を追加した。

.Net 7.0でプロジェクトを作製した。

.NET Core 3.1ってなんだろうか

Emgu.runtime.windows のインストール

VisualStudio で[ツール]->[NuGetパッケージマネージャ]->[ソリューションのNuGetパッケージの管理]->現れたダイアログで[参照]-[Emgu.runtime.windows] emgu.cv.runtime

カメラのキャプチャにはライブラリが必要

WPFのデフォルトではカメラからの入力のリアルタイムで出す方法は見つからなかった。 AForge、OpenCvSharpなどのライブラリが存在する。

  • Microsoft.Windows.SDK.ContractsというNuGetパッケージを使い、Windows.Media.Capture、

Windows.Media.MediaProperties、System.Windows.Media.Imagingなどのクラスを使います

ChatGPTに最初、手伝ってもらいたい

次の使用をもつWindowsデスクトップアプリのコードを作って下さい “- Visual Studioで開発

  • C#で動作
  • 動作する完全なプログラムのサンプルにしてください
  • ウィンドー内に「撮る」と「保存」のボタンがある
  • Windowsタブレットについているカメラからの映像を表示するエリアを持つ
  • カメラからの映像を保存する際のファイル名は日時をミリ秒までの文字列にする。
  • 保存する画像はpngフォーマット
  • 「撮る」のボタンを押すと1枚、保存
  • Model-View-ViewModelを意識したファイル構成にしてください
  • Microsoft.Windows.SDK.ContractsというNuGetパッケージを使い、Windows.Media.Capture、Windows.Media.MediaProperties、System.Windows.Media.Imagingなどのクラスを使います
  • カメラからの入力を映し続けるプレビューのエリアが必要です
  • 撮った写真のサムネイルのエリアが必要です。このサムネイルを選択し「保存」のボタンを押すと保存できるようにしてください。
  • UIとロジックのコードを分離するようにする
  • エラーハンドリングのコードは持つようにする
  • プロジェクトはWindows FormsではなくWPFで実装
  • MediaCapture クラスを使ってください。
  • アプリ終了時にはリソースの解放するようにしてください "

"

  • ウィンドー内に「撮る」と「保存」のボタンがある
  • カメラからの映像を保存する際のファイル名は日時をミリ秒までの文字列にする。
  • 保存する画像はpngフォーマット
  • 「撮る」のボタンを押すと1枚、保存
  • 撮った写真のサムネイルのエリアが必要です。
    • 撮った写真のサムネイルを複数枚表示できるようにしたいです。
      • 多い場合はスクロールできるようにします。
        • このサムネイルを選択し「保存」のボタンを押すと保存できるようにしてください。 "