C# 控制台应用程序 - 如何使用 GDI+ 在 BMP/JPG 文件中绘图?
Posted
技术标签:
【中文标题】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+ 在 BMP/JPG 文件中绘图?的主要内容,如果未能解决你的问题,请参考以下文章