C#中GDI如何连续绘制线段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中GDI如何连续绘制线段相关的知识,希望对你有一定的参考价值。

参考技术A 1.创建一个winform应用程序项目:打开visual studio2017程序设计软件,进入文件->新建->项目
2.创建一个windows窗口项目
3.在窗体中增加两个按钮,分别完成的功能是画水平直线和垂直直线
4.在程序中用到Pen对象
5.确定线条颜色,宽度,样式

C# 控制台应用程序 - 如何使用 GDI+ 在 BMP/JPG 文件中绘图?

【中文标题】C# 控制台应用程序 - 如何使用 GDI+ 在 BMP/JPG 文件中绘图?【英文标题】:C# Console Application - How to draw in BMP/JPG file using GDI+? 【发布时间】:2013-02-28 14:03:17 【问题描述】:

我想使用 C# 控制台应用程序和 GDI+ 在 BMP 或 JPG 文件中绘制矩形、箭头、文本、线条等形状。这是我在网上找到的:

c# 将 System.Drawing.Graphics 保存到文件 c# save System.Drawing.Graphics to file GDI+初学者教程http://www.c-sharpcorner.com/UploadFile/mahesh/gdi_plus12092005070041AM/gdi_plus.aspx 专业 C# - 图形与 GDI+ codeproject.com/Articles/1355/Professional-C-Graphics-with-GDI

但这仍然对我没有帮助。其中一些链接仅针对 Windows 窗体应用程序解释这一点,而其他链接仅供参考(MSDN 链接),仅解释 GDI+ 中的类、方法等。 那么如何使用 C# 控制台应用程序绘制图片文件呢? 谢谢!

【问题讨论】:

为什么不能在控制台应用程序中使用 Windows 窗体示例中的代码?无论哪种方式,您都将使用 System.Drawing.Graphics 代码做同样的事情。 【参考方案1】:

在控制台模式应用程序中创建位图非常简单。只是一个小绊脚石,项目模板没有预先选择您需要的 .NET 程序集。项目+添加引用,选择System.Drawing

一个非常简单的示例程序:

using System;
using System.Drawing;   // NOTE: add reference!!

class Program 
    static void Main(string[] args) 
        using (var bmp = new Bitmap(100, 100))
        using (var gr = Graphics.FromImage(bmp)) 
            gr.FillRectangle(Brushes.Orange, new Rectangle(0, 0, bmp.Width, bmp.Height));
            var path = System.IO.Path.Combine(
                Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
                "Example.png");
            bmp.Save(path);
        
    

运行此程序后,您的桌面上会出现一个新的位图。它是橙色的。使用 Graphics 方法发挥创意,使其看起来像您想要的那样。

【讨论】:

很抱歉,程序没有运行。它给出了这个错误:“错误1:当前上下文中不存在名称'bmp'”。第 7 行末尾的波浪形括号“”是什么?为什么没有“;”在第 6 行和第 7 行的末尾(带有“使用”语句的那些)?我正在使用 .NET 3.5 和 Visual Studio 2008 Professional。在问这个问题之前,我添加了那个参考。并尝试以这种方式绘制: Graphics g;笔 BlackPen = new Pen(Color.Black, 3); g.DrawRectangle(BlackPen, 1, 1, 300, 700); 但我不知道下一步该做什么! 括号没有错,这是经过测试的代码。您已经以一种破坏它的方式对其进行了修改,可能是通过修补括号。您当然应该声明您自己的 Graphics 对象g。使用在 Graphics.FromImage() 的 using 语句中创建的 gr 变量。否则,您将不会绘制位图。首先完全复制代码,如图所示,然后验证您是否获得了橙色位图。 对不起,代码 si 放在网站上的方式让我看错了括号。我只是再次复制粘贴,它的工作原理!谢谢!你对这个方法有什么看法,为什么你说我不应该声明一个 Graphics 对象?位图 b = 新位图 (100, 100);图形 g = Graphics.FromImage(b); g.DrawLine(new Pen(Color.Black, 3), 0, 0, 80, 50); b.Save("C:\\b.bmp"); 你错了!我会用你的想法!我只是在问:我发布的想法(我从另一个来源获得)有什么问题,为什么你说我不应该声明自己的 Graphics 对象?【参考方案2】: 添加对程序集的引用:System.Drawing(在 System.Drawing.dll 中)。 添加使用:命名空间:System.Drawing。 创建一个空的Bitmap,例如var bitmap = new Bitmap(width, height); 为该Bitmap创建Graphics对象:var graphics = Graphics.FromImage(bitmap); 使用图形对象方法在位图上绘图,例如graphics.DrawRectangle(Pens.Black, 0, 0, 10, 10); 将图像保存为文件:bitmap.Save("MyShapes.png");

【讨论】:

自己尝试一下,找出说明中的缺陷。有两个大错误。 @HansPassant:您的回答是我回答中所写内容的确切示例。 呵呵,不,我没有犯那两个大错。没有名为 System.Drawing.dll 的程序集,并且您的 Save() 调用实际上并未将位图保存为 JPEG 格式。可能给 OP 带来麻烦的问题,尤其是格式问题,非常难以诊断。 @HansPassant:如果这就是说明中的缺陷的意思,那好吧。 Assembly: System.Drawing (in System.Drawing.dll) 是从 MSDN 复制的一个句子,所以它不是 大错误。但是关于图像文件格式的第二个你是对的,我会将它从“jpg”编辑为“png”。 啊,哎呀,我弄错了那个。我们最终会得到正确的答案;)

以上是关于C#中GDI如何连续绘制线段的主要内容,如果未能解决你的问题,请参考以下文章

GDI 线段绘制示例程序

C# SkiaSharp OpenTK Winform - 如何从后台线程中绘制?

请教C#中如何在 WinForm中画曲线图

C# 控制台应用程序 - 如何使用 GDI+ 在 BMP/JPG 文件中绘图?

C# 获取指定 “QQ头像“ 绘制 “圆形头像框“GDI(Graphics)

如何在C#中连续调用方法? [关闭]