当调整大小时,wpf直方图保真度会降低

时间:2013-08-07 21:07:02

标签: wpf histogram

我开发了一个简单的直方图控件,可以显示实时图像中灰度颜色(1到256个分档)的分布。该控件在ItemsControl中呈现Rectangle,其ItemsContainer是ViewBox。在大多数情况下,一切都工作正常,但是当我调整托管控件的网格列(使用GridSplitter)时,直方图的保真度开始降低。

这是直方图在其初始状态下的几个镜头,然后在水平调整大小时(注意绿色矩形森林中的深色垂直线......我越小越好):

enter image description here enter image description here

这是呈现直方图的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会丢弃一些Visual,以便均匀分配其余部分。

我已经尝试使用Polygon代替ItemsControl和Rectangles来分配我的bin点并且行为消失了,但是,我需要能够MouseOver直方图并显示弹出窗口(除其他外,例如选择一个我的ViewModel中的bin和update属性的范围。如果你知道一种方法,使用多边形方法,我可以将鼠标悬停在绿色区域并确定我已经超过特定的区域,我肯定会对此持开放态度。

更新:

删除矩形XAML上的RenderOptions.EdgeMode =“Aliased”似乎解决了黑线毛刺的问题。虽然它在Designer中渲染得有些苍白(使用d:DesignData),但它似乎在运行时渲染得很好。我将推迟标记为“已回答”,直到其他人有机会进入。我真的对多边形方法感兴趣,因为当调整到更大的宽度时,我得到一个更清晰的直方图(我做的更宽)直方图,峰值得到的像素化程度越高,即由于矩形的宽度,峰值是平坦的,这表示为锯齿状的图而不是平滑的曲线图。如果只有Point将鼠标悬停在处理程序上:D。

0 个答案:

没有答案