Tag: 图形系统。绘图

如何绘制子像素线

在下面的代码中,我试图绘制两条线:一条具有子像素宽度(0.5),另一条具有1px宽度: var img = new Bitmap(256, 256); Graphics graphics = Graphics.FromImage(img); graphics.SmoothingMode = SmoothingMode.AntiAlias; // Draw a subpixel line (0.5 width) graphics.DrawLine(new Pen(Color.Red, (float)0.5), 0, 100, 255, 110); // Draw a single pixel line (1 width) graphics.DrawLine(new Pen(Color.Red, (float)1), 0, 110, 255, 120); img.Save(@”c:\temp\test.png”, ImageFormat.Png); graphics.Dispose(); img.Dispose(); 但是,在生成的图像中,两条线显示相同的宽度: 有没有办法让顶线出现亚像素(0.5px)? 编辑:经过一些研究, AGG可能是要走的路,其中有一个c#端口 。

OutOfMemoryException:内存不足 – System.Drawing.Graphics.FromImage

使用System.Drawing.Graphics.FromImage(在Windows 2012服务器上使用最新版本的.NET软件)时,我会出现Out of Memoryexception, 仅限于极少数特定的图像文件 。 大多数情况下代码工作正常。 上述问题的典型答案表明某些资源尚未发布。 在回答之前请考虑以下事项: – 此特定图像大小为34KB,是.JPG图像。 服务器空闲,内存超过32GB。 如果我查看这个jpg文件的属性,使用Windows资源管理器,通过右键单击文件,Windows说: 96 dpi和32位深度 。 但是,如果我使用任何图形程序(例如photoshop)打开这个jpg文件,文件属性显示为: 72 dpi和24 bit深度 。 因此, 我认为文件头属性所说的与文件实际包含的内容之间存在不匹配 。 此外,如果我使用图形程序打开jpg文件并且只是重新保存而不更改任何内容 ,则Windows资源管理器中的文件属性现在匹配/读取正确(72 dpi和24位深度); 并且文件由System.Drawing.Graphics正确处理,不会抛出exception 。 由于我对该主题的了解有限,我不知道图像文件的文件头是否可以包含与实际文件内容不同的数据 。 问题: 我该如何解决这个问题? 或者,我如何告诉System.Drawing.Graphics忽略文件头数据,只看实际的图像文件内容? (因为像Photoshop这样的所有图形程序似乎都有)。 谢谢!