午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

クリップボードの更新時に中の画像をキャプチャできるようにした

Pixcren1.4.0

スクショアプリ

変更点

クリップボードを監視して更新されたとき、
画像があった場合に保存することができるようにした

f:id:gogowaten:20210921184144p:plain
新旧比較

f:id:gogowaten:20210921184607p:plain

キャプチャ時の挙動

  • キャプチャ時の挙動

    • 保存:画像ファイルとして保存
    • コピー:クリップボードにコピー
    • 保存+コピー
    • 特殊:クリップボード更新されたら保存
      • このときは "マウスカーソルもキャプチャする" にチェックを入れていても無視される
      • 指定したキャプチャ範囲も無視される




クリップボード更新されたら保存を使ってみる

f:id:gogowaten:20210921204518p:plain
設定したところ
キャプチャ時の挙動を特殊にした
それ以外の設定は適当なもの

画像をコピーするアプリなら何でもいいはず
今回は動画編集アプリのaviutlで読み込んだゲーム動画のフレームをコピー

f:id:gogowaten:20210921204848p:plain
aviutl
ゲームはプレイステーション2真・三國無双3は光栄(コーエーテクモ)から

f:id:gogowaten:20210921204938p:plain
現在のフレームをクリップボードにコピー
aviutlのメニューの編集から現在のフレームをクリップボードにコピーを実行すると

f:id:gogowaten:20210921205808p:plain
保存された画像ファイル
画像ファイルとして保存される

f:id:gogowaten:20210921213634p:plain
保存された実際の画像



不具合

一回のコピーで同じ画像が複数保存されることがある
これはアプリに依って違う感じで、よく起こるアプリはエクセルで
たとえば

f:id:gogowaten:20210921212058p:plain
セル範囲のコピー
このセル範囲を

f:id:gogowaten:20210921212155p:plain
コピー
コピーしたら

f:id:gogowaten:20210921212252p:plain
保存された4枚の画像
全く同じセル範囲の画像が4枚保存された
これも毎回4枚ではなくて、2,3枚のときが多くて、たまに1枚、4枚保存されたのはこれが初めてと不安定で、原因も不明

f:id:gogowaten:20210921212855p:plain
保存された画像
画像自体は期待通りなんだけどねえ




ダウンロード先

https://github.com/gogowaten/ScreenCapture/releases/download/1.4.0/Pixcren1.4.0.zip

github.com Pixcren1.4.0.zipがそれ


作成動作環境

動作に必要なのは.NET 5がインストール済みのWindowsで、.NET Frameworkだけでは動かないはず


今回の方法は以前の記事から

クリップボードの更新監視は
gogowaten.hatenablog.com

クリップボードから画像の取得は

gogowaten.hatenablog.com
このあたりを使ってクリップボードからの画像取得部分は

f:id:gogowaten:20210921221422p:plain
クリップボードからの画像取得部分
クリップボードから取得した画像はすべてのピクセルのアルファ値が0(完全透明)の何も映っていない画像になっていることがあるので、その場合はピクセルフォーマットをBgr32に変換することでアルファ値を255にしている
完全透明画像かどうかの判定は、左上の1ピクセルだけで済ませている、2379行目

クリップボードが更新されたときは最初にエクセル系かそれ以外のアプリなのかの判定を雑にしているのが2430行目


日記

WPFか.NETなのかわからんけど、クリップボードからの画像取得がイマイチなんだよねえ、今度の新しいVisual Studioや.NET 6ではそのへんが直っているといいねえ

動画を久しぶりにいじった
aviutlの新しいバージョン(2年前)が出ていた!
コーデックもx265もあまり使ったことがないのにvp9、av1とか新しいのが出てたので少し試したけど使い方がよくわからんのとPCスペックが足りなくて時間かかり過ぎな割には画質はそれほどでも…って感じだった
x265はaviutlで使える便利なプラグインの拡張x265出力(GUI)Exで色々設定を変えて試したけど、画質はx264と変わらない割には時間だけは5倍以上かかるので昔ながらのx264が一番いいって結果になったのは少し残念だった
それでもテストに使ったのが記事にもある真・三國無双3のプレイ動画だけなので、動きの少ない動画とか平坦な動画だと違ってくるのかもしれない、あとフルHD以上の解像度とか
x264はエンコード速度が速いところがいい、640x480とかならmedium設定で100fps近く出る、x265だと同じmediumで30fpsで最低限つけたいオプションを付けたら20fps以下になるから10分の動画だと60 / 20=3で10 * 3 = 30分以上かかる、x264なら80fpsなので60 / 80 = 0.75で10 * 0.75 = 7.5は7分30秒で終わる




関連記事

次回のPixcrenは3日後 gogowaten.hatenablog.com



前回のWPF記事は130日前

前回のPixcren記事

最初のPixcrenは267日前