私は今、Windows Graphics Captureを使ってキャプチャーした画面を時間差で表示するプログラムを作成しています。
良い感じに画面のキャプチャーなどはできたのですが、数秒前のキャプチャーした画面を表示しようとしても、キャプチャーしたフレームのデータが現在のものに上書きされてしまって困っています、、、
例えば以下のようなプログラムがあるとします。
---
IDirect3DSurface tmp_surface;
# この中は毎フレーム実行される
{
IDirect3DSurface surface = 現在の画面のデータ;
# 500フレーム目のみtmp_surfaceに代入する
if (frame_count == 500) {
tmp_surface = surface;
}
# 1000フレーム目で表示して確認してみる
if (frame_count == 1000) {
# 500フレーム目の画面の状態が見たいのに
# 1000フレーム目の画面が表示されてしまう
Draw(tmp_surface);
}
frame_count++;
}
---
500フレーム目でtmp_surfaceにsurfaceを代入して値を保持しています。
それを1000フレーム目で表示して500フレーム前の状態を確認しようとしているのですが、どうしても1000フレーム目の状態が表示されてしまいます。
色々調べたのですが、シャローコピーとディープコピーというものがあり、上記のプログラムではシャローコピーになってしまっているのだと思います。
なので、ディープコピーできる方法を調べたのですが、どうも自作のクラスという前提の説明ばかりで、DirectXやWindows Graphics CaptureといったAPIのクラスのディープコピーの方法は出てきません、、、
もし方法がわかる方や、別の手段を知っている方がいればぜひ教えてください!
よろしくお願いします!
▼ 参考サイト
https://docs.microsoft.com/ja-jp/windows/uwp/aud …
https://tips.hecomi.com/entry/2021/03/23/230947
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>500フレーム目でtmp_surfaceにsurfaceを代入して値を保持しています。
本当に?
>それを1000フレーム目で表示して500フレーム前の状態を確認しようとしているのですが、どうしても1000フレーム目の状態が表示されてしまいます。
症状から推測すると、
# 500フレーム目のみtmp_surfaceに代入する
if (frame_count == 500) {
tmp_surface = surface;
}
では
500フレーム目にキャプチャーした画面が入っている中身ではなく
500フレーム目にキャプチャーした画面が入っている入れ物の場所
をコピーしただけなのでは?
その後、その場所に別のキャプチャーした画面が入れられれば、当然、その時入っている画像(1000フレーム目の画像)が表示される
ということでしょうかね。
>もし方法がわかる方や、
具体的な操作方法はわかりませんが、推測が正しいとすれば、
500フレーム目にキャプチャーした画面が入っている「中身をコピーする命令」を書けばよいだけの気がしますけど・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- モニター・ディスプレイ 外部ディスプレイとの解像度の差について 3 2022/05/29 10:40
- マウス・キーボード PCのタッチ画面とタッチペンの対応 2 2023/01/14 16:01
- Word(ワード) surfaceの画面を別モニターに映す方法を教えてください。 3 2022/05/19 17:06
- LANケーブル・USBケーブル Surface laptop Goの画面をそのままテレビに映し出したいが、映らない 3 2022/09/04 17:43
- 画像編集・動画編集・音楽編集 動画をディスク作成すると画像が乱れる。 4 2022/06/24 07:49
- ノートパソコン surface go3 電源を入れた初期画面でサインインをクリックしてパスワードを求められますが、パ 1 2022/10/09 22:17
- マウス・キーボード HEIYO Surfaceぺんの使用方法を教えてください 2 2023/04/09 10:40
- アプリ Android studio 初心者 Hello Android!しか表示されない 1 2023/08/01 08:47
- iOS iPhone用動画保存アプリiCapのデータは外付けUSBメモリに保存できますか? 1 2022/10/18 17:48
- 美術・アート 液タブかsurface proか、作画作業の面だけで比較をお願いします 2 2022/07/10 01:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
逆コンパイルと逆アセンブルの...
-
C言語について。
-
これて逆じゃないですか?
-
C言語について。
-
コンソールアプリを作成するの...
-
私は
-
C言語 1から20までの逆数の和を...
-
Windows Formアプリからコンソ...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
あんまり考えたくないけど
-
10進数からN進数に変換するプロ...
-
バッチファイルで以下のような...
-
c#のTLS1.2での通信について
-
だいがくの電し書籍で
-
VisualStudio2022でC言語プログ...
-
VisualStudioでのプログラミン...
-
C言語って古いですか?
-
ホワイトハッカーを目指そうか...
-
【C言語】全角文字の配列を、全...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フレーム内に移動したい
-
Access2010でサブフォームのフ...
-
車の運転時のメガネ 縁なし(...
-
2倍速を等速動画に(車載動画)
-
VBで動的に作成したパネルの上...
-
フレームでのResponse.Redirect
-
シーケンス番号の初期値
-
トグルボタンの排他制御でご教...
-
KSR2 車体番号
-
めくれるカードの作成方法
-
ソーラーパネルのアルミフレー...
-
被写体のHSVを正確に取得(webca...
-
オシロスコープのような描写方...
-
gotoAndPlayで特定のフレームま...
-
【C++】IDirect3DSurfaceのディ...
-
ブラウザが揺れる(震動)させ...
-
富士通FMV-C600のHDD交換
-
モーショントゥィーンに関する...
-
Final Cut ProのDVD映像(チャ...
-
ドコモ携帯 N504isのフォトフ...
おすすめ情報
そうですね、書き方が悪かったです。
値は保持しているつもりで参照を持っているだけ、つまりシャローコピーになってしまっていると思います。
なのでディープコピーの方法を知りたいというのが今回の質問内容です。
私も推測で、メンバ変数を一つ一つ値渡しでコピーすると言った方法は思いついたのですが、DirectXなどのAPIのクラスが持つメンバ変数は、自分が作ったクラスでもないですし複雑 (アクセス指定子の影響など) なので、なかなか簡単に中身をコピーすることができません。
コピーコンストラクタなども自作クラスの例しか出てきませんし、、、
こちらにて解決しました↓
https://teratail.com/questions/3aq9e4z44k1ubt