Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.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
C# 在WPF中绘制线条,就像在WinForms中一样_C#_Wpf_Listview_Filter - Fatal编程技术网

C# 在WPF中绘制线条,就像在WinForms中一样

C# 在WPF中绘制线条,就像在WinForms中一样,c#,wpf,listview,filter,C#,Wpf,Listview,Filter,如何在WPF中绘制线条,使结果看起来像Winformsresult 我有这张图片:PictureBox.BackgroundImage 我倒过来说: 我得到的:PictureBox屏幕截图 代码: 画笔:=TextureBrush来自反向位图 尺寸:=300 条宽:=25 棒间距:=5 结果获取PictureBox.Image 公共位图CreateSpectrumLine(画笔、int-size、int-barWidth、int-barSpacing) { 使用(变量笔=新笔(画笔,(浮

如何在WPF中绘制线条,使结果看起来像
Winforms
result

  • 我有这张图片:
    PictureBox.BackgroundImage

  • 我倒过来说:

  • 我得到的:
    PictureBox
    屏幕截图

  • 代码:

    画笔:=
    TextureBrush
    来自反向位图
    尺寸:=300
    条宽:=25
    棒间距:=5

    结果获取
    PictureBox.Image

    公共位图CreateSpectrumLine(画笔、int-size、int-barWidth、int-barSpacing)
    {
    使用(变量笔=新笔(画笔,(浮动)条形宽度))
    {
    var b=新位图(大小、大小);
    使用(var g=Graphics.FromImage(b))
    {
    g、 透明(彩色、透明);
    g、 SmoothingMode=System.Drawing.Drawing2D.SmoothingMode.None;
    int h=尺寸;
    PointData[]点=计算点(大小);
    对于(int i=0;i

如何使用
WPF
组件/命令(生成
BitmapSource
)获得相同的结果?

如果不知道CalculatePoints的功能,很难回答。如果x值正确,而y值不正确,则上述算法可能存在问题。对于
p1
p2
,为什么要改变y?这不应该总是从
0
变为
size-1
?不需要
h
变量,您可以使用
size
来提高代码的可读性。由于您的所有值都是
int
,因此可以将
x
更改为
int
,而不是强制转换
float
,并使用
Point
而不是
PointF
。如果不知道CalculatePoints的作用,很难回答。如果x值正确,而y值不正确,则上述算法可能存在问题。对于
p1
p2
,为什么要改变y?这不应该总是从
0
变为
size-1
?不需要
h
变量,您可以使用
size
来提高代码的可读性。由于所有值都是
int
,因此可以将
x
更改为
int
,而不是强制转换
float
,并使用
Point
而不是
PointF
public Bitmap CreateSpectrumLine(Brush brush, int size, int barWidth, int barSpacing)
{
    using (var pen = new Pen(brush, (float)barWidth))
    {
        var b = new Bitmap(size, size);
        using (var g = Graphics.FromImage(b))
        {
            g.Clear(Color.Transparent);
            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None;
            int h = size;
            PointData[] points = CalculatePoints(size);

            for (int i = 0; i < points.Length; i++)
            {
                PointData p = points[i];
                int barIndex = p.PointIndex;
                float x = (float)((barWidth + barSpacing) * barIndex + barWidth / 2);

                var p1 = new PointF(x, h + 1);
                var p2 = new PointF(x, h - (float)p.Value + 1);

                g.DrawLine(pen, p1, p2);
            }
        }
        return b;
    }
}

struct PointData
{
    public int PointIndex;
    public double Value;
}