Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wpf直方图的保真度会随着尺寸的减小而降低_Wpf_Histogram - Fatal编程技术网

wpf直方图的保真度会随着尺寸的减小而降低

wpf直方图的保真度会随着尺寸的减小而降低,wpf,histogram,Wpf,Histogram,我开发了一个简单的直方图控件,可以显示实时图像中灰度颜色(1到256个像素)的分布。该控件在ItemsContainer为ViewBox的ItemsControl中呈现矩形。大多数情况下,一切正常,但是当我调整承载控件的网格列的大小(使用GridSplitter)时,直方图的保真度开始降低 这是直方图在初始状态下的几张照片,然后当它水平调整大小时(注意绿色矩形森林中的黑色垂直线…越小,情况越糟): 下面是渲染直方图的XAML: <ItemsControl x:Name="_Hist

我开发了一个简单的直方图控件,可以显示实时图像中灰度颜色(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和矩形来分布我的箱子点,这种行为消失了,但是,我需要能够将鼠标移到直方图上并显示弹出窗口(除其他外,例如,在我的ViewModel中选择一系列箱子并更新属性)。如果你知道一种方法,使用多边形的方法,我可以在绿色区域中悬停,并确定我在一个特定的垃圾箱上,我肯定对此持开放态度

更新:

删除矩形XAML上的RenderOptions.EdgeMode=“Aliased”似乎可以解决黑线故障的问题。虽然它在设计器中呈现的效果有点苍白(使用d:DesignData),但在运行时似乎呈现得很好。在别人有机会插话之前,我将暂缓将其标记为“已回答”。我对多边形方法非常感兴趣,因为当调整到更大的宽度时,我得到了更清晰的直方图(直方图越宽,峰值的像素化程度就越高,也就是说,由于矩形的宽度,峰值是平的,它呈现为锯齿状图而不是平滑的曲线图)。如果点在处理程序上有鼠标:D