Tag: graphics

如何在C#中绘制简单的图形?

我只想在C#中绘制简单的2D对象,如圆形,直线,方形等。 我怎么做? 回到Turbo C ++时代,我记得初始化一些图形库是为了做同样的事情。 我需要在.NET中做类似的事情吗? 3D对象有什么不同吗? 像DirectX这样的东西会让这更容易吗? 任何指向教程或示例的链接都非常感谢。

如何在.NET中将Twips转换为像素?

我正在进行一个迁移项目,其中数据库实际上以缇为单位存储显示大小。 由于我不能使用twips为WPF或Winforms控件分配大小,我想知道.NET是否有在运行时可用的转换方法?

SetPixel太慢了。 是否有更快的方法来绘制位图?

我正在制作一个小型油漆程序。 我在位图上使用SetPixel来绘制线条。 当画笔大小变大时,如同25个像素一样,会有明显的性能下降。 我想知道是否有更快的方法来绘制位图。 以下是该项目的背景: 我正在使用位图,以便我可以利用图层,如Photoshop或GIMP。 正在手动绘制线条,因为这最终将使用图形输入板压力来改变线条长度的大小。 这些线条最终应沿着边缘进行抗锯齿/平滑处理。 我将包括我的绘图代码,以防万一这是缓慢而不是Set-Pixel位。 这是在绘画发生的窗口: private void canvas_MouseMove(object sender, MouseEventArgs e) { m_lastPosition = m_currentPosition; m_currentPosition = e.Location; if(m_penDown && m_pointInWindow) m_currentTool.MouseMove(m_lastPosition, m_currentPosition, m_layer); canvas.Invalidate(); } MouseMove的实现: public override void MouseMove(Point lastPos, Point currentPos, Layer currentLayer) { DrawLine(lastPos, currentPos, currentLayer); } DrawLine的实现: // The primary drawing code for most tools. […]

绘制多个手绘折线或曲线图 – 添加撤消function

我正在尝试使用撤消和重做function创建一个简单的绘图应用程序。 我假设您可以将您绘制的内容添加到列表中并调用列表来绘制所有内容。 然后撤消应该只删除最后添加的项目并重新绘制所有内容。 问题是,如何将我绘制的内容添加到列表中并使用该列表进行撤消? 我正在使用位图重绘方法。 这是我画的方式: Point start, end; bool painting; private List myPoints = new List(); private void pnlMain_MouseDown(object sender, MouseEventArgs e) { start = e.Location; painting = true; } private void pnlMain_MouseUp(object sender, MouseEventArgs e) { painting = false; } private void pnlMain_MouseMove(object sender, MouseEventArgs e) { if (painting == true) { end […]

更快地显示图片框

我正在尝试将图像快速加载到图片框中并绘制它们。 我将位图分配到图片框和显示时间之间有0.13秒的延迟。 每当我执行一个picturebox.refresh() ,它都会在调用paint方法之前的.13 – .15秒内延迟。 有没有办法摆脱这种延迟? 我在Visual Studio 2010中使用C#。我使用FreeImage库加载图像。 这是我的pictureBox_MouseMove事件中的代码: if (IsMouseDown || DrawLine.Checked || IsMovingBox) { Tracing.Trace(“Update Picture Box”); pictureBox.Refresh(); } 然后我在调用paint事件时追踪一条线。 延迟在两条迹线之间。 如果我在117kb使用双色调tiff图像,则延迟为.13秒。 将此图像加载到内存中需要0.04秒。 用这个位图替换我的picturebox位图需要0.01秒。 如果我在1125kb使用灰度jpg图像,则延迟为.14秒。 将此图像加载到内存需要0.26秒。 用这个位图替换我的picturebox位图需要0.33秒。

RichTextBox语法实时突出显示 – 禁用重绘

我正在创建一个带有RichTextBox的函数,并且可以访问关键字列表和’badwords’。 我需要突出显示我在用户输入时在RichTextBox中找到的任何关键字和坏词,这意味着每次发布编辑键时都会调用该函数。 我写过这个函数,但是盒子里的文字和光标闪烁得太过舒服了。 我发现了一个解决方案 – 在我编辑和格式化文本时禁用RichTextBox重绘自身的能力。 但是,我知道这样做的唯一方法是覆盖“WndProc”函数并拦截(我将要收集的内容)重绘消息如下: protected override void WndProc(ref System.Windows.Forms.Message m) { if (m.Msg == 0x00f) { if (paint) base.WndProc(ref m); else m.Result = IntPtr.Zero; } else base.WndProc(ref m); } 在我开始突出显示之前将布尔’paint’设置为false,在我完成时将其设置为true。 但正如我所说,我制作的函数必须采用RichTextBox; 我不能使用子类。 那么,有没有办法禁止从外部自动重新绘制RichTextBox?