在创建图纸应用程序或包含数千种形状的仿真时,建议使用源自视觉的类(例如drawdVisual)而不是由于性能降解而衍生的类. 我想知道绩效降级是多少,并且大部分是由于派生类层次结构中的框架工作类而引起的?除了应该决定使用视觉而不是形状的阈值是什么?在连锁店中失去UIELECT和框架的利弊是什么? 解决方案 Drawing派生的类的重量都更轻,因为它们基本上只是呈现原始人.除了定义绘制的区域外,他们实际上没有做太多. 当您使用从Shape衍生的类时,所有对象都必须在标准布局系统的一部分中注册事件处理和工作,并处理所有自己的渲染.这对很少的对象没有巨大的影响,但是随着您添加更多内容,布局通行证和事件处理确实会对整体性能产生很大的影响. 我想知道性能降级是多少,并且大部分是由于派生类层次结构中的框架工作类而引起的? 几乎所有内容 - 它源自FrameworkElement的事实意味着a Shape必须处理所有布局,事件和渲染,这是整个原因较慢的原因. 以及
以下是关于 system.drawing 的编程技术问答
有人知道讨论GDI+绩效的可靠(希望是广泛的)书籍/网站(显而易见)? 例如,我最近遇到了善意, 大卫 解决方案 嗯.如果您需要绘制路径大纲,就知道Fillpath比DrawPath更快! 优化GDI+的最佳方法与任何其他代码完全相同:首先,不要优化它.而是: 从编写它开始,以便它可以工作,然后决定它是否真的太慢了. 然后检查您的"算法": 简化您正在绘制的内容(减少您绘制的内容的数量),并且会更快(在大多数情况下,减少混乱的情况都会更好). 您是否每次都绘制整个显示屏,还是使用夹矩形来避免绘制不需要更新的图像部分? 检查您如何绘制东西.您是否为每次重绘创建和破坏资源(例如刷子和笔)?将它们缓存到成员变量中.您是否多次绘制相同的像素? (例如,绘制背景,然后在顶部绘制一个位图,然后在其上绘制一个矩形 - 也许您可以避免其中一些重画).当只有10个片段看起来足够好时,您是否使用100个多边形段绘制曲线?当窗口滚动时,您是否获取操作系统来移动现有图像,以
i具有以下代码,该代码在上传图像并使用system.graphics.graphics将其绘制在150 x 200 div中,但是当从iOS设备拍摄图像时,图片旋转到90度. fyi:我遇到了同样的问题,绘制JavaScript画布和这个解决方案对我有用.因此,我正在寻找C# 中的等效解决方案 private System.Drawing.Image ResizeAndDraw(System.Drawing.Image objTempImage) { Size objSize = new Size(150, 200); Bitmap objBmp; objBmp = new Bitmap(objSize.Width, objSize.Height); Graphics g = Graphics.FromImage(o
当我试图制作面板边框时,我只是遇到了问题,首先,我将属性面板设置为:" autoscroll = true;" 然后,我将边框图形代码放入面板事件中: ControlPaint.DrawBorder(e.Graphics, ClientRectangle, Color.Black, 5, ButtonBorderStyle.Solid, Color.Black, 5, ButtonBorderStyle.Solid, Color.Black, 5, ButtonBorderStyle.Solid, Color.Black, 5, ButtonBorderStyle.Solid); 实际上我仍然有第二个问题,我会在这里解释这一切.我希望您不要介意. 好吧,当面板滚动处于活动状态时,面板边框将崩溃.看看图片: 即使我放了 `e.Graphics.Transl
我有一个具有2个面板的表格.我正在尝试将面板2的内容作为图像保存.我看到了一个线程,该线程谈论了使用屏幕捕获来执行此操作,但是我找不到该线程了.还可以阅读有关使用DrawTobitMap方法的信息,但它来自Visual Studio 2005信息,不确定它是最新或最合适的解决方案.那么,您建议将我的面板作为图片保存什么,最好是JPG? 更新: 我实施了下面建议的drawTobitMap的代码,但它节省了我的面板2的一半(如果有所不同,则左半部分). 因为它节省了一半的面板2,所以我将宽度调用乘以" 2",以使其保存完整表格.有点奇怪,对我来说没有意义,因为面板2的宽度应该是完整的面板,而不是一半的面板? //multiplies the width of panel2 call by 2 to make it save the full panel Bitmap bmp = new Bitmap(splitContainer1.Panel2.Width * 2, splitC
双重缓冲整个表单可以通过设置" allpaintinginwmpaint"," userPaint"和" doublebuffer"控制styles的值来完成整个表单. > 但是,system.windows.forms.panel不能发生这种情况,因为该类不允许我这样做.我找到了一种解决方案: http:http://bytes. com/topic/c-sharp/answers/267635双重碰撞面板控制.我还尝试了以下方法: winforms double Buffering .它很懒惰,即使它在小图上使用,我也有一些自定义资源,因为我不会将整个形式变成一个图纸.第二个似乎引起了问题.还有其他方法可以做吗? 我问这个问题,因为我不希望面板上的图纸在调整表单大小时始终闪烁.如果有一种方法可以摆脱闪烁而没有双重缓冲,我会很高兴知道. 解决方案 我应该很久以前发布了我的解决方案... 好吧,这是我的解决方案: Bitmap buffer = new
我明天要进行测试,我们必须使用油漆事件重新绘制我们的对象,我们可能不会使用计时器. 正如MSDN所说:"重新绘制时,绘制事件是在重新绘制时提出的." ,但这是我已知的,只有在形式最小化或不可见的和可见的后才发生时才发生. 我的代码: public partial class Form1 : Form { public Graphics drawArea; public int xPos, yPos; public Form1() { InitializeComponent(); } private void Form1_Paint(object sender, PaintEventArgs e) { drawArea = e.Graphics; DrawUser(); } private void Form1_KeyDown(object send
我有使用类的WCF服务 namespace MyService { [DataContract] public class SomeResponse { [DataMember] public System.Drawing.Rectangle BoundingBox { get; set; } } } 在客户端,当我尝试访问BoundingBox矩形时,矩形将其名称空间从System.Drawing.Rectangle更改为MyServiceReference.Rectangle. 我希望WCF框架足够聪明,可以意识到System.Drawing.Rectangle也存在于客户端,并因此使用正确的名称空间.可以告诉服务这样做吗? 解决方案 这里的主要问题是WCF使用SOAP发送/接收数据,该数据不是直接连接到.NET,而是一个开放的Web标准.例如. Java客户端也可能会消耗数据,因此对System.Dr
,如果我有一个大图,上面有各种几何形式(线,矩形,圆,e.t.c.),则线程需要大量时间来绘制所有内容.但是在现实生活中,一栋建筑是由多个工人建造的.因此,如果图形是建筑物,并且线程是构建器,则绘制的速度将更快.但是我想知道如何. 你能告诉我如何吗?是否有可能(尽管我已经问过,答案是"是")?值得使用吗?有什么风险? 如果我错过了问题,请告诉我有关它们的问题并回答. 谢谢! 解决方案 假设您使用的是GDI+和System.Drawing.Graphics对象将图形(矩形,圆等)渲染到背景图表表面(例如System.Drawing.Bitmap对象):System.Drawing.Graphics对象的实例成员您需要使用的是不是线程安全. 给出了这个,我不会使用一个以上的"构建器"线程来渲染您的图形. 相反,我的建议是将所有图纸执行到 背景线程中的System.Drawing.Bitmap对象,而不是多个背景线程.您可以使用状态栏或其他指标让用户知道您的程序
文档是从MVC控制器到Debian Squeeze Linux服务器打印机使用以下代码的印刷文档. 打印机中的页面是A4. 纸上打印的文字太大且没有变形.文本的最右边是不可见的,因为它不适合页面. 如果从.NET到HP LaserJet的Windows打印,则输出是正确的. 因此,它看起来像单声道或三星ML-331X系列串联打印机,因为未知原因会导致太大且没有sharp的输出. 如何修复此问题,以便像Windows一样打印位图? 可能的解决方案: 最佳方法是直接打印格式的HTML.如何在没有安装浏览器的服务器中进行操作? WKHTMLTOPDF不支持打印.我将其发布在如何在Linux Server中打印格式化的HTML 也许可以使用wkhtmltopdf将html转换为pdf而不是bitmap,而不是bitmap,我将其作为单独的问题在如何在MVC控制器中在Debian Linux中打印PDF wkhtmltoimage还可以产生其他
我目前正在与Monotouch合作.我有一个可以打开相机的应用程序,然后需要处理当前正在捕获的图像.我正在使用与我的代码和它们的兴趣差异是在我的uiimagePickerController上放置的overlayview.cs,但是我有以下代码: using (var screenImage = CGImage.ScreenImage.WithImageInRect(Frame)) { _imageView = UIImage.FromImage(screenImage); Bitmap srcbitmap = new System.Drawing.Bitmap(_imageView); } 但是,运行此代码将导致内存不断填充,直到应用程序关闭.似乎永远不会处理system.drawing.bitmap.我正在使用zxing.monotouch,所以我需要位图,以便可以创建一个位图的字节[]以传递到rgbluminancesource 关于我如何使它表现出
你好,我正在制作一个有2个文本框和2个按钮的程序 当我按添加按钮时,它将使用此代码制作2个新的文本框: private void ADD_ROW_Click(object sender, EventArgs e) { //Make the NEW_TEXTBOX_1 HOW_FAR += 1; TextBox NEW_TEXTBOX_1 = new TextBox(); NEW_TEXTBOX_1.Name = "NAME_TEXTBOX_" + HOW_FAR.ToString(); //Set NEW_TEXTBOX_1 font NEW_TEXTBOX_1.Font = new Font("Segoe Print", 9); NEW_TEXTBOX_1.Font = new Font(NEW_TEXTBOX_1.Font, FontStyl
更新:我想用帮助我解决问题的代码回答自己的问题.它是由布拉德利(Bradley)提交的,但已调整为我工作,也可能会帮助其他人.但是我无法回答,直到重新开放.链接的副本提供了一种方法,但没有代码.基于代码的答案对社区有所帮助 我在控制台应用程序内部图像上绘制的文本的格式有一些细微的问题.我要绘制的文字是: bas2016 = ptr = E30BAS2010 =(S20)$ W30 $ PTO2016 = N5W20N5(W20N10)(S10W20)S5W5S5E10N10(E15N5)(E15N5)(S5E15)(S5E15) )N5E5N5W10S10(W15S5)(N5W15)N10W25 $ E25S10(E15S5)(N5E15)N10E10N15W65 $ E65N15 $. 我的方法调用是: RectangleF rectF = new RectangleF(0, 0, 320, 320); graphics.DrawString(fullTrav
我正在为处理图像处理的公司项目提供服务,其中一种方法应该从传递给图像的图像中清洁元数据. i 思考实现我目前有效,但是我不确定它是否会影响图像的质量,或者是否有更好的方法来处理此任务.如果您知道一种更好的方法,您能告诉我吗? 这是所讨论的方法: public byte[] CleanMetadata(byte[] data) { Image image; if (tryGetImageFromBytes(data, out image)) { Bitmap bitmap = new Bitmap(image); using (var graphics = Graphics.FromImage(bitmap)) { graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; g
使用我们的应用程序时,大约有1%的用户会突然崩溃.日志以下显示了例外,到目前为止,我唯一看到的共同点是,它们都有XP SP3. 预先感谢 Out of memory. at System.Drawing.Graphics.CheckErrorStatus(Int32 status) at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect, Int32 srcX, Int32 srcY, Int32 srcWidth, Int32 srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs, DrawImageAbort callback, IntPtr callbackData) at System.Drawing.Graphics.DrawImage(Image image, Rectangle destRect,
如何使用C#绘图类绘制弹簧 解决方案 这比C#一个更像是一个数学问题.您想要的是派生一个参数方程您希望绘制的曲线. 随着该操作并填充一个点对象的数组,并带有特定步骤的一个间隔的参数方程值(步骤越小,最终绘图看起来就越像实际的形状).然后,您可以使用g.drawlines( msdn:drawlines )表面上的实际曲线. 您可以通过修改笔对象的参数来编辑行的宽度,颜色和其他属性. 您的实际代码看起来像这样: void DrawSpring (Graphics g) { List points = new List(); double step = 0.01; for(double t = -2; t
我正在尝试处理一个大尺寸的图像.由于处理需要太多时间来完成图像,然后再处理图像.处理后,我可以在小尺寸的图像上绘制矩形.我可以翻译如何翻译该矩形与原始未量的图像的坐标IE:在未刻录的图像上绘制矩形. 我正在使用以下代码调整图像大小 public static Size ResizeKeepAspect(Size CurrentDimensions, int maxWidth, int maxHeight) { int newHeight = CurrentDimensions.Height; int newWidth = CurrentDimensions.Width; if (maxWidth > 0 && newWidth > maxWidth) //WidthResize { Decimal divider = Math.Abs((Decimal)newWidth / (Decimal)maxWidth);
我使用c#和asp.net 4. 如何转换和在等效的RGB颜色中的十六进制颜色? Example: FF0000 to 255,0,0. 我的目的是将此颜色传递给arargb名称空间系统的方法 FromArgb Method (Int32, Int32, Int32) (Alpha is implicit as opaque) 目前我使用此代码清除和图像并应用不透明的扁平颜色: System.Drawing.Graphics.Clear(System.Drawing.Color.Red)); 这与预定义的颜色一样正常,例如"红色","黑色"等,但显然并不明显具有更精确的颜色. 有什么想法吗?感谢您的帮助! 资源: http://msdn.microsoft.com/en-en-us/library/CCE5H557.aspx us/library/system.color.aspx 解决方案 为什么不这样做? Sy