午後わてんのブログ

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

#ソフトウェア

ビット演算ビットシフトメモ、画像の使用色数と色ごとのピクセル数カウント

RGB(byte)からint(long)型へ 普通の計算の場合 V = G * 256) + (B * 256 * 256) ビットシフト、ビット演算の場合 V = R | (G << 8) | (B << 16) int(long)型からRGB(byte型)へ 普通の計算の場合、%(mod)は割り算の余り 10%3=1、10割る3の余りは1 R = V % 256…

画像の使用色数を表示するアプリその3

レイアウト変更 使用ピクセル数が多い順に上から128色までリストに表示するようにしてみた 右のリストから選んだ色の情報は左上に表示するようにした その色のHSVと使用率と順位の表示を追加 この画像だと5.47%が使用率で6が順位、順位はListBoxのSelectedIn…

色相環画像作成、WriteableBitmapとImage.Clip

一番右のが目的の色相環 いきなりImage4の画像を作成しようとしても難しくてできなかったので Image2を作って、あとはImageクラスのClipプロパティにEllipseGeometryを指定して切り抜いて作成した 以前作ったRGBとHSVを相互変換するhsv.dllを参照に追加して…

画像の使用色数を表示するアプリその2

昨日の方法を使って棒グラフがウィンドウ幅に合わせて伸縮するようにした 選択した色の情報表示するようにした 16進数とARGB形式、総ピクセル数に占める割合 16色に減色した画像 グラフは色数が少ない画像のほうが面白い 普通の写真画像だと同じような色が並…

ListBoxで棒グラフ、MultiBindingを使ってListBox幅と要素幅を連動

ListBoxで棒グラフ…ちょっと何言ってるか分からないですね… MultiBingingを使って ListBoxの幅に合わせて要素の幅を変更している 上半分のListBoxは失敗例で 下半分が期待通りにできたListBox Bindingソース1 ListBoxのActualWidth Bindingソース2 DataConte…

画像の使用色数を表示するアプリ作ってみた

画像の使用色数と使用数が多い上位10色を表示 起動したところ ここに画像ファイルをドロップする 画像は 普通の写真画像、サイズは1024x768 これをドロップで 使用されている色数が表示される この画像は86151色だった カウント開始ボタンを押すと 使用され…

半透明画像とWPFのPixelFormats.Pbgra32は相性が良くないかも

半透明(アルファが255未満)のピクセルがある画像を、FormatConvertedBitmapを使ってPixelFormatをPixelFormats.Pbgra32に変更すると色が変わってしまう なのでPixelFormatはBgra32が良さそう 半透明の青一色のpng形式の画像 ARGB=100,30,122,224 16進数だと…

以前イベントで処理していたのをBindingにしてC#とXAMLで書いてみた

イベントで処理していたのをBindingに変更してC#とXAMLの両方で書いてみたけど どっちがいいのかよくわからん 動作自体は前のときと同じ Sliderの変更で画像の表示倍率を変更、画面より大きくなったらスクロールバーを表示 配置 Slider 拡大率指定用 ScrollV…

WPFのListBoxでいろいろ、Binding、見た目の変更、横リスト

ListBoxでのデータバインディングと見た目の変更とか 横表示は ListBox.ItemsPanel ItemsPanelTemplate StackPanel Orientation="Horizontal" リストに表示される要素の見た目の変更は ListBox.ItemTemplate DataTemplate StackPanel Border TextBlock /Stac…

WPF?画面上のどこでもマウスカーソル下の色を取得

画面上のどこでもマウスカーソル下の色を取得 クリックでもその色を取得 今回のアプリのダウンロード先 github.com 自身のウィンドウ内のカーソルの位置や色の取得ならWPFにも用意されているんだけど、自身のウィンドウ外、画面上のどこでもって場合にはWPF…

画像で使われている色を3D散布図で表示してみた、Pythonとmatplotlibすごい

画像で使われているすべての色を表示するのは処理が重すぎたので、等間隔で色を取得 この画像で使われている100ピクセル分の色を3D散布図で表示してみた 使ったアプリと言語は Visual Studio 2017とPythonとmatplotlib Pythonは初めて使ったので初投稿です P…

任意の2色に減色するときディザリングパターンを使う

任意の2色に減色するときディザリングパターンを使う 元画像のピクセルの色が 元のRGB=(50, 140, 200)で 減色用パレットから元の色に近い色を2色選んだら 色1RGB=(77, 159, 166) 色2RGB=(68, 72, 212) だったとき 2x2のディザリングパターンを使ってどうなれ…

カラー画像を1bpp(1bit)白黒画像に変換アプリver1.1、閾値の自動設定、大津の二値化でできたかも

大津の二値化を使った白黒画像できたかも 今回のアプリのダウンロード先 github.com 1年前に作った カラー画像を1bppの白黒2値化するアプリは 白黒の閾値は手動で設定か、画像全体の輝度平均で指定していたのを 自動で設定する、自動1と自動2を付け足した …

WPF、Parallel.Invoke、並列実行は昨日より速く

昨日の続き 目的は昨日と同じで画像処理を考えて、RGB順に並んだbyte型配列から、RGBそれぞれの配列を作成、それぞれの最小値、最大値、平均値(double型)を求める 結果 一番上が昨日、一番下が今回最速で 昨日より2倍くらい速くできた 今回のアプリのダウン…

LINQのMin、Max、Average使ってみたけど遅い、画像処理には向かない

LINQはとても便利だけど場合によっては遅い 今回試したのは画像処理で使うbyte型配列 ここからRGBそれぞれの配列と最低値、最大値、平均値を求めたい これらは減色処理で使う ピクセルフォーマットがRGBの場合はRGBの順番で並んでいる [R,G,B,R,G,B…] 変数名…

WPF色一覧表示してHSVで並べ替えするアプリできた

WPF色一覧表示と並べ替え System.Windows.Media.Colorの中の色一覧を表示 並べ替えは 色の名前順(昇順ソート) H:色相(昇順ソート) S:彩度(昇順ソート) V:明度(降順ソート) YUVのY:輝度(降順ソート) 一覧マスをクリックで色の詳細表示と見本枠の背景色変…

WPF、ScrollViewerの中の要素をマウスドラッグ移動しているように見せかける

サイズが1024x768画像をScrollViewerの中に置いたImageに表示して マウスドラッグ移動で画像の表示位置を変更 画像を動かしているように見えるけど 実際に動かしているのはスクロールバー 今回のアプリのダウンロード先 github.com デザイン画面 ScrollViewe…

WPF、スクロールバーの同期、2つの画像を並べて拡大して見比べたい、ScrollViewer

同じ大きさの2つの画像を並べて拡大して見比べたい 右画像は左を16色に減色したもの 今回のアプリのダウンロード先 github.com デザイン画面 <feff></feff>

WPF、マウスドラッグ移動でなめらかな曲線を描画、PolyBezierSegment

マウスドラッグ移動(右クリック)でベジェ曲線 できた! 4ヶ月前の2018/6/24のときには こうだったからだいぶ良くなった 夏が春くらいの暑さならもっと良かったんだけどねえ 線の端を丸める これは単にPathの設定を変えただけで 764行目からの3行でそれぞれ …

WPF、ベジェ曲線、違和感なく滑らかになるような制御点座標はどこ?その3(終)

前回で方向線角度を求めることができたので 距離を与えてベジェ曲線を表示してみる 距離の決め方は前々回と同じ感じで A0:方向線距離(長さ)0は直線 A1:前後アンカー点間距離の0.3倍 C1:前後アンカー点距離平均の0.3倍 C2:前後アンカー点距離それぞれの0.…

WPF、ベジェ曲線、違和感なく滑らかになるような制御点座標はどこ?その2、アプリでの角度とラジアン、座標から角度

VBやC#だと便利な三角関数が用意されているけど、角度じゃなくてラジアンが基本になる ラジアンは日本語だと弧度っていうらしい 角度とラジアン 角度の180度はラジアンだと3.14、パイだと1パイ(π) ラジアンを角度に変換する ラジアン/パイ*180 = 角度 アプリ…

WPF、ベジェ曲線、違和感なく滑らかになるような制御点座標はどこ?その1

今回のアプリのダウンロード先 github.com 指定した点を通る違和感のない滑らかなベジェ曲線を引きたい 今まで gogowaten.hatenablog.com マウスクリックでCanvasにベジェ曲線で曲線、PolyBezierSegment ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブロ…

マウスドラッグ(移動)で線を描画、CanvasにPolyline

前回まではクリックしたところを線を中継する頂点にして線を描いていたけど これをマウスの動いたとおりの線を描いてみたくなった エクセルの図形のフリーハンドみたいなの WPFには似たことができるInkCanvasっていう、パネルコントロールがあるんだけど、使…

Polyline折れ線からベジェ曲線作成と曲げ具合

今回のアプリのダウンロード先 github.com Polylineの折れ線からベジェ曲線 このPolylineを使って描いた折れ線から このベジェ曲線を作成 C#コード using System.Windows; using System.Windows.Media; namespace _20180623_折れ線をベジェ曲線に { public p…

WPFで矢印曲線、ベジェ曲線(Path)と矢印(Polygon)を組み合わせて表現、PolyBezierSegment

今回のアプリのダウンロード先 github.com ベジェ曲線に矢印 クリックしたところをアンカーポイントにしてベジェ曲線の終端に矢印 昨日は直線だったのをベジェ曲線にしてみた デザイン画面 C#のコード using System; using System.Collections.Generic; usin…

WPFで矢印線、直線(PolyLine)と矢印(Polygon)を組み合わせて表現

今回のアプリのダウンロード先 github.com 矢印線の描画 直線部分になるPolyLineと矢印になるPolygon、2つを組み合わせて表現 クリックしたところを中継点にする直線の矢印線を描画 WPFには矢印がない 線を描画するコントロールのPolyLineやLineには線の開始…

ベジェ曲線の長さ測定できた、C#とWPF

4日前 gogowaten.hatenablog.com の続きで今度は曲線Pathの長さを測る GetFlattenedPathGeometryとGetPointAtFractionLengthを使って測る 今回のアプリのダウンロード先 github.com 半径50の円周で確認 円周は2*パイ*半径なので 2*3.14*50=314になればいい …

GetPointAtFractionLengthで分割した座標からのPathの長さ測定の確認

今回のアプリのダウンロード先 github.com 昨日の続きで直線Pathの長さ測定 GetPointAtFractionLengthを使ってPathを等分割できたので、2点間の距離を測るユークリッド距離を使って長さを求める 普通ならこんな面倒なことしなくても、元の直線の座標から計算…

Pathを等分したところに印と角度を表示してみた、GetPointAtFractionLength

PathGeometryクラスのGetPointAtFractionLengthを使って Pathを等分したところに印と角度を表示してみた 今回のアプリのダウンロード先 github.com GetPointAtFractionLength うーん、よくわからん…Fraction(分数) 第1引数のprogressに渡すのは0から1の数値…

曲線Pathを近似の直線PathにするGetFlattenedPathGeometry使ってみた

GetFlattenedPathGeometryメソッドを使って曲線のPathGeometryから直線のPathGeometryを取得 GetFlattenedPathGeometry(tolerance, ToleranceType) Tolerance:公差、許容できる誤差をdouble型で指定 ToleranceType:Absolute絶対 or Relative相対のどちらか…