对于我的一些winforms应用程序,我需要创建一大堆GDI+对象(画笔、笔、字体等)并一遍又一遍地使用它们。我创建了一个ghetto缓存单例来完成我需要的,但是代码味道太重了......publicsealedclassGraphicsPalette{publicstaticreadonlyGraphicsPaletteInstance=newGraphicsPalette();staticGraphicsPalette(){}privateDictionarysolidBrushes;//multithreadingprivateobjectbrushLock;privateGra
我有一些代码可以在多台机器(开发、QA、UAT)上完美运行。不幸的是,在生产过程中,我在bmp.Save(ms,ImageFormat.Png);上收到“GDI+中发生一般错误”,因此,我假设您无法重现问题,但也许有人可以发现我的错误。一些注意事项,我已经搜索了很多常见的解决方案,请注意这是保存到MemoryStream因此大多数人建议的文件权限问题不适用,“bmp”也不适用打开时被锁定”解决方案,因为我又在其他地方写了。最后,这不是因为png需要可搜索的流,因为MemoryStream是可搜索的。请注意,如果我将其更改为ImageFormat.Jpeg,它就可以正常工作。我只有PNG
我需要打印数字,通过增加字体大小和粗细来强调中间的一些数字。在下面的示例中,强调了456。使用的字体和两种大小是用户可配置的。当前代码使用对Graphics.DrawString(...)的三个调用来完成此操作。我遇到的问题是,对于大多数字体,我看到偏移1像素的问题(相对于灰线,456比其他数字高一个像素):我在帖子底部附上了一些针对各种字体的调试转储(BobPowell公式)。其他技术产生了类似的结果。为了在公共(public)基线上打印文本,需要计算特定字体的基线偏移量。我尝试使用三种技术:首先是MSDN的代码:http://msdn.microsoft.com/en-us/lib
我这样渲染插值曲线:e.Graphics.DrawLines(newPen(Color.Red),_interpolationPoints.ToArray());有时会抛出OverflowException。检查_interpolationPoints数组显示了一些非常大的科学计数值,例如{X=0.0Y=-1.985174E+10}我怀疑Y=-1.985174E+10是GDI+无法处理的值。这很好,但是我可以绘制的最大/最小X和Y值是多少,因此可以限制数据(并警告用户)而不是在绘制期间捕获溢出异常?限制是否记录在案?例如,我想做这样的事情:if(yValfloat.MaxValue)t
为什么我会收到“GDI+中发生一般错误”异常?IntPtrhicon=tempBitmap.GetHicon();IconbitmapIcon=Icon.FromHandle(hicon);returnbitmapIcon;错误发生在我的应用程序运行超过30分钟时。(我每秒将System.Drawing.Bitmap转换为System.Drawing.Icon) 最佳答案 这是由句柄泄漏引起的。您可以使用TaskMgr.exe的“进程”选项卡诊断泄漏。查看+选择列并勾选句柄、GDI对象和用户对象。在程序运行时观察这些列。如果我的猜测
有没有一种简单的方法可以将SVG路径标记转换为C#System.Drawing.Drawing2D.GraphicsPath?它们密切相关,我希望可以轻松地将SVG路径数据转换为GraphicsPath点。 最佳答案 ThisSVGproject通过以下方式提供解决方案:varpathData=...;vargraphicsPath=newGraphicsPath();foreach(varsegmentinSvgPathBuilder.Parse(pathData))segment.AddToPath(graphicsPath);
我有一个从Panel创建的全局图形对象。每隔一定时间从磁盘中拾取图像并使用Graphics.DrawImage()绘制到面板中。它在几次迭代中工作正常,然后我得到以下有用的异常:System.Runtime.InteropServices.ExternalException:AgenericerroroccurredinGDI+.atSystem.Drawing.Graphics.CheckErrorStatus(Int32status)atSystem.Drawing.Graphics.DrawImage(Imageimage,Int32x,Int32y)atSystem.Drawi
我正在解决一个问题,即当我使用GDI操作调整大小后的图像时,它们会失去色彩饱和度。我正在加载一个JPG作为原始图片,调整它的大小,结果图像的饱和度(颜色强度)比原始图片低很多。我能做些什么来改善它?这是我的代码:using(varoriginal=System.Drawing.Image.FromStream(newMemoryStream(image.RawData))){using(vardst=newBitmap(width,height,PixelFormat.Format32bppArgb)){using(varg=Graphics.FromImage(dst)){g.Smo
我有一个带有主从View的应用程序。当您从“主”列表中选择一个项目时,它会使用一些图像(通过RenderTargetBitmap创建)填充“详细信息”区域。每次我从列表中选择不同的主项时,我的应用程序使用的GDI句柄数量(如ProcessExplorer中所报告)都会增加-并最终下降(或有时锁定)在10,000个GDI句柄处使用。我不知道如何解决这个问题,因此非常感谢任何关于我做错了什么的建议(或者只是关于如何获取更多信息的建议)。我在名为“DoesThisLeak”的新WPF应用程序(.NET4.0)中将我的应用程序简化为以下内容:在MainWindow.xaml.cs中public
我服务器上的一个ASP.NET应用程序在运行几天后开始抛出GDI+异常。重新启动服务器后,几天一切正常,然后突然再次出现此异常。第一次出现后,每次我尝试保存PNG图像时都会出现,直到我再次重新启动。当我尝试以JPEG格式保存图像时,它工作正常。当我从我的项目运行这段代码时,它失败了:varpath=@"C:\Project\images\logo.png";varimage=Image.FromFile(path);using(varms=newMemoryStream()){image.Save(ms,ImageFormat.Png);//FailshereonGDI+excepti