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

4
我想在使用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 Forms示例中的代码?无论如何,你都将使用System.Drawing.Graphics代码执行相同的操作。 - mbeckish
2个回答

9

在控制台模式应用程序中创建位图非常简单。只有一个小问题,项目模板没有预选您需要的.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行(使用“using”语句的行)末尾没有“;”?我正在使用.NET 3.5和Visual Studio 2008专业版。在提问之前,我添加了那个引用,并尝试以这种方式绘制:<code> Graphics g; Pen BlackPen = new Pen(Color.Black, 3); g.DrawRectangle(BlackPen, 1, 1, 300, 700); </code>但我不知道接下来该怎么做! - user2119805
方括号没有问题,这是测试过的代码。你以某种方式修改了它,可能是通过操纵括号来打破它。你绝对不应该声明自己的Graphics对象g,而应该使用在从Graphics.FromImage()创建的using语句中创建的gr变量。否则你就画不到位图上。首先将代码完全按照所示进行复制,并验证你是否获得了橙色位图。 - Hans Passant
抱歉,代码在网站上的放置方式让我看到括号的方式有误。我只是重新复制粘贴了一遍,现在它能正常工作了!谢谢!你对这种方法有何看法?为什么不应该声明一个Graphics对象?Bitmap b = new Bitmap(100, 100); Graphics g = Graphics.FromImage(b); g.DrawLine(new Pen(Color.Black, 3), 0, 0, 80, 50); b.Save("C:\b.bmp"); - user2119805
你错了!我会采用你的想法!我只是在问:我发表的想法有什么问题(这个想法来自另一个来源),为什么你说我不应该声明自己的Graphics对象? - user2119805

2
  • 添加引用:程序集: System.Drawing (在 System.Drawing.dll 中)
  • 添加 using:命名空间: System.Drawing
  • 创建一个空的Bitmap,例如:var bitmap = new Bitmap(width, height);
  • 为该Bitmap创建Graphics对象:var graphics = Graphics.FromImage(bitmap);
  • 使用 graphics 对象方法在位图上绘制,例如:graphics.DrawRectangle(Pens.Black, 0, 0, 10, 10)
  • 将图像保存为文件:bitmap.Save("MyShapes.png");

尝试自己找出指令中的缺陷。有两个大错误。 - Hans Passant
@HansPassant:你的回答正是我回答中所写的一个完美例子。 - Ryszard Dżegan
呵呵,不,我没有犯那两个大错误。没有名为System.Drawing.dll的程序集,而且你的Save()调用实际上并没有将位图保存为JPEG格式。这些问题可能会让OP花费很长时间来解决,特别是格式问题非常难以诊断。 - Hans Passant
@HansPassant:如果“方向上的缺陷”就是这个意思,那么好吧。Assembly: System.Drawing (in System.Drawing.dll) 这句话是从MSDN复制过来的,所以不是“大错误”。但你说的第二个关于图像文件格式的问题是正确的,我会把它从“jpg”改成“png”。 - Ryszard Dżegan
啊,糟糕,我弄错了。我们最终会得出正确的答案的 ;) - Hans Passant
谢谢您提供的详细信息,yBee! - user2119805

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接