gpt4 book ai didi

.net - 为什么使用 Pen::DashPattern 设置绘制椭圆不能产生预期的结果?

转载 作者:行者123 更新时间:2023-12-01 23:11:52 34 4
gpt4 key购买 nike

我试图(简单地)画一些沿着椭圆路径旋转的线,并认为我有一个很好的简单方法来做到这一点。不幸的是,我的解决方案似乎有一些问题:

void EllipseDisplayControl::OnPaint(PaintEventArgs^ e)
{
Graphics^ gfx = e->Graphics;
gfx->SmoothingMode = Drawing2D::SmoothingMode::AntiAlias;

int width = 100;
int height = 10;

for( int i = 0; i < 15; i ++ )
{
Drawing::Pen^ myPen = (Drawing::Pen^) Drawing::Pens::RoyalBlue->Clone(); //use the standard blue as a start point
myPen->Color = Drawing::Color::FromArgb(64, 32, 111, 144);
myPen->Width = 3;
myPen->DashStyle = Drawing::Drawing2D::DashStyle::Solid;
gfx->DrawEllipse(myPen, 0, 50+i*20, width, height); // Draw the blue ring

float ellipseCircumference = Math::PI * Math::Sqrt(2* (Math::Pow(0.5*width,2) + Math::Pow(0.5*height,2)));
array<Single>^ pattern = {4, ellipseCircumference};

Drawing::Pen^ myPen2 = (Drawing::Pen^) Drawing::Pens::White->Clone(); //use the standard blue as a start point
myPen2->DashPattern = pattern;
myPen2->DashOffset = i*10;
gfx->DrawEllipse(myPen2, 0, 50+i*20, width, height); // Draw the rotating white dot
}
}

...产生:

http://www.joncage.co.uk/media/img/BadPattern.png

...那么为什么后两个椭圆是全白色的? ...我怎样才能避免这个问题?

最佳答案

这可能是众多 GDI+ 错误之一。这是由于抗锯齿与 DashPattern 相结合所致。有趣的是(好吧,有点......),如果你删除 SmoothingMode = AntiAlias,你会得到一个美妙的 OutOfMemoryException (如果你在 google 上搜索“gdi+ 模式 outofmemoryException”,你会发现数百个这样的异常。真是一团糟。

由于 GDI+ 并未真正得到维护(尽管它也在 .NET Framework Winforms 中使用,顺便说一句,我用 .NET C# 重现了您的问题),因为此链接可以告诉我们:Pen.DashPattern throw OutOfMemoryException using a default pen ,解决这个问题的唯一方法就是尝试不同的值。

例如,如果您使用此更改 DashOffset 设置:

 myPen2->DashOffset = i*ellipseCircumference;

您将生成一组漂亮的椭圆,因此也许您可以找到一个真正适合您的组合。祝你好运:-)

关于.net - 为什么使用 Pen::DashPattern 设置绘制椭圆不能产生预期的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4270015/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com