2

ライブ画像のグレースケール カラー (1 ~ 256 ビン) の分布を示す単純なヒストグラム コントロールを開発しました。このコントロールは、ItemsContainer が ViewBox である ItemsControl で四角形をレンダリングします。ほとんどの場合、すべてが正常に機能していますが、コントロールをホストしているグリッド列のサイズを (GridSplitter を使用して) 変更すると、ヒストグラムの忠実度が低下し始めます。

これは、初期状態のヒストグラムのショットと、水平方向にサイズ変更されたときのショットです (緑の四角形の森の中にある暗い縦線に注意してください... 小さくするほど悪化します)。

ここに画像の説明を入力 ここに画像の説明を入力

ヒストグラムをレンダリングする XAML は次のとおりです。

  <ItemsControl x:Name="_Histogram" Margin="1,3"  
                ItemsSource="{Binding HistogramCollection}" 
                VerticalAlignment="Bottom">
      <ItemsControl.Template>
          <ControlTemplate TargetType="ItemsControl">
              <Grid>
                  <Viewbox Stretch="Fill" MaxHeight="100" >
                      <ItemsPresenter />
                  </Viewbox>
              </Grid>
          </ControlTemplate>
      </ItemsControl.Template>

      <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
              <StackPanel Orientation="Horizontal" />
          </ItemsPanelTemplate>
      </ItemsControl.ItemsPanel>

      <ItemsControl.ItemTemplate>
          <DataTemplate>
              <Grid>
                  <Rectangle Fill="LimeGreen"
                             Stretch="Fill"
                             Height="{Binding Bin}"
                             MinWidth="1"
                             StrokeThickness="0"
                             VerticalAlignment="Bottom"
                             HorizontalAlignment="Stretch"
                             RenderOptions.EdgeMode="Aliased"
                             UseLayoutRounding="True"
                             MouseEnter="Rectangle_MouseEnter"
                             MouseLeave="Rectangle_MouseLeave"
                            />
              </Grid>
          </DataTemplate>
      </ItemsControl.ItemTemplate>
  </ItemsControl>

何かご意見は?私の推測では、残りを均等に分配するために、WPF がいくつかのビジュアルを捨てていると思います。

ItemsControl と Rectangles の代わりに Polygon を使用してビン ポイントを配布する実験を行ったところ、動作がなくなりましたが、ヒストグラムを MouseOver してポップアップを表示する機能が必要です (とりわけ、ビンの範囲を選択するなど)。 ViewModel のプロパティを更新します)。Polygon アプローチを使用して、緑色の領域にカーソルを合わせ、特定のビンの上にいると判断できる方法を知っている場合は、間違いなくそれを受け入れます。

アップデート:

Rectangle XAML で RenderOptions.EdgeMode="Aliased" を削除すると、黒い線の不具合の問題が解決するようです。デザイナーでは (d:DesignData を使用して) レンダリングがやや薄くなりますが、実行時には問題なくレンダリングされるようです。他の人が参加する機会が得られるまで、「回答済み」としてマークするのは保留します。より広い幅にサイズ変更すると、より鮮明なヒストグラムが得られるため、多角形のアプローチに本当に興味があります。ヒストグラムでは、ピークがよりピクセル化されます。つまり、長方形の幅のためにピークが平坦になり、滑らかな曲線のプロットではなくギザギザのプロットとして表示されます)。Point だけにマウス オーバー ハンドラがあれば:D.

4

0 に答える 0