|  | 
 
 
 楼主|
发表于 2023-3-21 17:35:55
|
显示全部楼层 
| For the first suggestion, using a DrawingVisual, you can create a custom class like this: 
 public class CircleVisual : DrawingVisual
 {
 public CircleVisual(double x, double y, double radius)
 {
 using (DrawingContext dc = RenderOpen())
 {
 dc.DrawEllipse(Brushes.White, new Pen(Brushes.White, 0.1), new Point(x,y), radius, radius);
 }
 }
 }
 Then you can add instances of this class to a VisualHost element in your XAML:
 
 <Window x:Class="WpfApp1.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 Title="MainWindow" Height="450" Width="800">
 <Grid>
 <VisualHost x:Name="visualHost"/>
 </Grid>
 </Window>
 And in your code-behind, you can loop through your data and create circles like this:
 
 foreach (var item in DieControl.ThrdResultData.BumpHeighList.BumpHeight)
 {
 CircleVisual circle = new CircleVisual(item.BumpPosX * scaleX, item.BumpPosY * scaleY, 25 * scaleX);
 visualHost.Children.Add(circle);
 }
 For the second suggestion, using a WriteableBitmap, you can create a bitmap and add it to an Image element in your XAML:
 
 <Window x:Class="WpfApp1.MainWindow"
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 Title="MainWindow" Height="450" Width="800">
 <Grid>
 <Image x:Name="image"/>
 </Grid>
 </Window>
 And in your code-behind, you can create a bitmap and draw circles on it using the WritePixels method:
 
 WriteableBitmap bitmap = new WriteableBitmap((int)DieControl.MapCanvas.ActualWidth,
 (int)DieControl.MapCanvas.ActualHeight,
 96,
 96,
 PixelFormats.Bgra32,
 null);
 
 for (int i = 0; i < DieControl.ThrdResultData.BumpHeighList.BumpHeight.Count; i++)
 {
 int centerX = (int)(DieControl.ThrdResultData.BumpHeighList.BumpPosX[i] * scaleX);
 int centerY = (int)(DieControl.ThrdResultData.BumpHeighList.BumpPosY[i] * scaleY);
 int radius = (int)(25 * scaleX);
 
 // Create an array of color values for the circle pixels
 byte[] pixels = new byte[radius * radius * 4];
 
 // Fill the array with white color values
 for (int j = 0; j < pixels.Length; j += 4)
 {
 pixels[j] = 255; // blue
 pixels[j + 1] = 255; // green
 pixels[j + 2] = 255; // red
 pixels[j + 3] = 255; // alpha
 }
 
 // Write the pixels to the bitmap at the circle center position
 bitmap.WritePixels(new Int32Rect(centerX - radius / 2,
 centerY - radius / 2,
 radius,
 radius),
 pixels,
 radius * 4,
 0);
 }
 
 // Set the image source to the bitmap
 image.Source = bitmap;
 | 
 |