Tag: 绘图

如何测量.NET中Drawing.Bitmap绘制的字符串的像素宽度?

我正在生成一个包含动态编写文本的.png图像。 出于文件大小的原因,我需要创建具有最小宽度的位图。 我该怎么做呢?

从地平线获得一条线的角度

我想知道如何从水平轴X获得AB线的角度.SO中的其他问题仅在两条线之间进行。 我知道我总是可以绘制二线AC并计算,但我想知道是否有更快的方法。 编辑:我很确定我没有做过早优化。

将System.Windows.Media.Color转换为System.Drawing.Color

private void DialogFont_Load(object sender, EventArgs e) { LoadInstalledFonts(); SetupInitialDialogSelections(); lblPreview.ForeColor = colorPicker1.colorPickerControlView1.CurrentColor.Color; } 我想将值转换为System.Drawing.Color。 有任何想法吗?

在绘制对象时Winform不滚动

C#3.0,.net framework 3.5我正在绘制(使用图形类中的draw方法)窗口上的许多实心矩形垂直构造。 表格从500 x 500像素开始,矩形只在运行时从网络下载数据后绘制 – 矩形的数量取决于下载,所以我不知道它是在前面。 因此,只有几个矩形被绘制,因为窗体的大小是固定的。 所以我用google搜索/ Binged(以免有人建议我这样做)并找到一些提示,但它们在这种情况下不起作用 – 比如将表单AutoScroll属性设置为true或尝试双缓冲。我也试图在列表框控件上绘图并设置它的滚动属性等…但没有骰子。 我猜测没有办法显示,使用绘图在窗体上垂直地说200个矩形。 我需要一些其他的解决方案……请任何想法。 也许是一个图片盒列表然后用纯色填充每个图片框? 谢谢

如何读取不在前台的应用程序的屏幕像素?

我目前的代码非常适合读取屏幕上显示的任何像素颜色,其摘录如下所示: using (Bitmap bmpScreenCapture = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height)) { using (Graphics g = Graphics.FromImage(bmpScreenCapture)) { g.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, bmpScreenCapture.Size, CopyPixelOperation.SourceCopy); } Color c = bmpScreenCapture.GetPixel(x,y); } 但是,要使其正常工作,我正在检查的窗口必须是屏幕上显示的内容。 如果我将另一个窗口带到前台,那么我的代码不起作用,因为它当然是在监视屏幕像素。 我怎样才能使我的代码可以继续读取与我想要监视的程序相关联的顶部窗口的像素,当它的窗口位于其他窗口后面时? 谢谢。

c#Infragistics UltraChart LineChart

有人可以提供一个从数据表中向UltraChart添加一个系列的简单示例吗? 该表具有时间序列值(x轴上的时间值,y轴上的测量(双)值)。 到目前为止,我看到的时间序列添加到图表中的唯一示例是针对一组有限的硬编码数据点。 我希望能够从表格中的选择中收取数据系列。 任何想法的想法和/或建议都非常感谢。 谢谢,鲁本。

如何知道WPF中何时渲染(绘制)控件(或窗口)?

我需要将Window的内容存储到图像中,保存并关闭窗口。 如果我在Loaded事件上关闭窗口,图像包含窗口,其中一些项目被绘制好,其他一些只是一半绘制或扭曲而其他项目不在图像上。 如果我放一个计时器并在一定时间后关闭窗口(根据窗口的复杂程度,在250毫秒和1秒之间),图像都可以。 看起来窗口需要一些时间来完全渲染自己。 有没有办法知道何时完成此渲染以避免使用Timer并在我们知道它已完成渲染时关闭窗口? 谢谢。

为什么TextRenderer.MeasureText不能在C#中使用较大的字体正确测量文本?

我正在做的是获取字符串的像素大小并将其转换为百分之一英寸(即像素/ DPI =英寸,英寸* 100 =百分之一英寸)。 这是我的代码: private static SizeF TextSize(string text, Font txtFnt) { SizeF txtSize = new SizeF(); // The size returned is ‘Size(int width, int height)’ where width and height // are the dimensions of the string in pixels Size s = System.Windows.Forms.TextRenderer.MeasureText(text, txtFnt); // Value based on normal DPI settings of 96 […]

使用WPF绘制图像网格

我正在尝试使用WPF绘制图像/图标网格。 网格尺寸会有所不同,但通常为10×10到​​200×200。 用户应该能够单击单元格,并且某些单元格需要每秒更新(更改图像)10-20次。 网格应该能够在所有四个方向上增长和缩小,并且它应该能够切换到它所代表的3D结构的不同“切片”。 我的目标是找到一种适当有效的方法,根据这些要求绘制网格。 我当前的实现使用WPF Grid 。 我在运行时生成行和列定义,并使用Line (对于网格线)和Border (对于单元格,因为它们当前只是打开/关闭)在相应的行/列处填充网格。 ( Line对象一直跨越。) 在扩展网格时(按住Num6),我发现在每次操作时绘制的速度都太慢,所以我修改它只是为每个增长列添加一个新的ColumnDefinition , Line和Border对象集。 这解决了我的增长问题,也可以使用类似的策略来快速缩小。 为了在模拟中更新单个单元格,我可以简单地存储对单元格对象的引用并更改显示的图像。 甚至可以通过仅更新单元格内容而不是重建整个网格来改进到新的Z级别。 但是,在我完成所有这些优化之前,我遇到了另一个问题。 每当我将鼠标hover在网格上时(即使在慢速/正常速度下),应用程序的CPU使用率也会激增。 我从网格的子元素中删除了所有事件处理程序,但这没有任何效果。 最后,控制CPU使用的唯一方法是为Grid设置IsHitTestVisible = false 。 (为Grid每个子元素设置它都没有做任何事!) 我相信使用单独的控件来构建我的网格对于这个应用来说过于密集和不合适,并且使用WPF的2D绘图机制可能更有效。 不过,我是WPF的初学者,所以我正在寻求如何最好地实现这一目标的建议。 从我读过的内容来看,我可能会使用DrawingGroup将每个单元格的图像组合成一个图像以供显示。 然后,我可以为整个图像使用单击事件处理程序,并通过鼠标位置计算单击的单元格的坐标。 但这似乎很混乱,我只是不知道是否有更好的方法。 思考? 更新1: 我接受了朋友的建议并转而使用带有Rectangle的Canvas用于每个单元格。 当我第一次绘制网格时,我将对所有Rectangle引用存储在一个二维数组中,然后当我更新网格内容时,我只是访问这些引用。 private void UpdateGrid() { for (int x = simGrid.Bounds.Lower.X; x <= simGrid.Bounds.Upper.X; x++) { for (int y = simGrid.Bounds.Lower.Y; […]

Graphics.DrawImage替代大图像

我试图在图像上绘制带有反色的十字准线(“加号”),以显示图像中所选点的位置。 我是这样做的: private static void DrawInvertedCrosshair(Graphics g, Image img, PointF location, float length, float width) { float halfLength = length / 2f; float halfWidth = width / 2f; Rectangle absHorizRect = Rectangle.Round(new RectangleF(location.X – halfLength, location.Y – halfWidth, length, width)); Rectangle absVertRect = Rectangle.Round(new RectangleF(location.X – halfWidth, location.Y – halfLength, width, length)); ImageAttributes attributes = […]