午後わてんのブログ

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

画像の使用色数とその色のピクセル数を表示するアプリその6

CountColor1.3.8

f:id:gogowaten:20200321110842p:plain

CountColor1.3.8

ダウンロード先はギットハブ

ファイル名:CountColor1.3.8.zip

github.com

 

貼付1ボタン

f:id:gogowaten:20200321111206p:plain

普通の画像ならこれで貼り付けできるはず

PrintScreenやAlt+PrintScreen、Win+Shift+s、他の画像アプリでのコピー

 

エクセルのセル範囲

f:id:gogowaten:20200321113821p:plain

セル範囲をコピーして

f:id:gogowaten:20200321114059p:plain

貼り付け1ボタンで貼り付けしたところ

 

エクセルのグラフも

f:id:gogowaten:20200321114159p:plain

貼り付けできた

 

エクセルの図形

f:id:gogowaten:20200321114358p:plain

貼り付け1だと透明な部分が白になってしまうので、用意したのが

貼り付け2ボタン

f:id:gogowaten:20200321114553p:plain

これなら透明部分が反映されるので

 

f:id:gogowaten:20200321114858p:plain

より正確な色数がわかる

 

 画像背景の市松模様の表示の有無切り替え

f:id:gogowaten:20200321115031p:plain

市松模様ボタンで切り替えられる

 

 

クリップボードからの画像取得の処理部分

f:id:gogowaten:20200321120628p:plain

Clipboard.GetImage()で取得できるんだけど、WPFだとAlphaの値が0に置き換えられてしまう画像もあるので、すべてのピクセルのAlphaを操作して確認している、めんどくさいけどこれが確実、あとはエクセルのセルのコピーでもAlphaが0になるので、それも判定もしているけど、これは蛇足だったかも

 

Alphaを255に変更するのと、判定の処理

f:id:gogowaten:20200321121318p:plain

Alphaが全部0かどうかを判定するのがめんどくさいねえ

エクセルのデータ判定はデータのフォーマットが"EnhancedMetafile"ならエクセルのデータって判定している。よくわかっていないので誤判定があるかも

 

エクセルの図形用

f:id:gogowaten:20200321122051p:plain

Clipboard.GetDataObject().GetData("PNG");
で取得したものはMemoryStreamなので、それを使ってBitmapFrameのCreateメソッドでBitmapSourceを作成している、この方法は

dobon.net

こちらから

この方法だとpng形式で得られるみたいで、透明や半透明部分も再現されるがいいんだけど、残念なのはdpiが96以外になること、なるっていうかエクセルがそうしているみたい

ほんとはEnhancedMetafile形式で取得したのをBitmapSourceにできればいいんだけど、WPFだと普通にはできないみたい?WindowsFormならできるんだけどねえ

 

 関連記事

前回は1年前

gogowaten.hatenablog.com

 

 クリップボードの画像取得で色々試したのは5ヶ月前

このときすべてのピクセルのAlphaを判定するのが嫌だったので色々試したんだけどねえ