Tag: gdi +

如何创建带圆角的用户控件?

我正在尝试使用具有圆角的用户控件。 它没有固定的大小,但通常宽度不超过120像素。 我需要用户控件及其内容(标签和表格)具有圆形边缘,看起来像一个圆形框。 我用过这段代码。 [DllImport(“Gdi32.dll”, EntryPoint = “CreateRoundRectRgn”)] private static extern IntPtr CreateRoundRectRgn ( int nLeftRect, // x-coordinate of upper-left corner int nTopRect, // y-coordinate of upper-left corner int nRightRect, // x-coordinate of lower-right corner int nBottomRect, // y-coordinate of lower-right corner int nWidthEllipse, // height of ellipse int nHeightEllipse // width of ellipse ); […]

c#径向渐变画笔效果在GDI和winforms中

我创建了ac#windows应用程序并编写了75%的代码。 该程序允许用户创建流程图,并根据状态对流程图形状进行着色。 我希望它们成为像3d一样的按钮 来自网站Webdesign.org 我不想为每个按钮创建一个PNG,而是希望使用画笔或其他技术在C#中创建它们,例如: // Create solid brush. SolidBrush blueBrush = new SolidBrush(Color.Blue); // Create points that define polygon. PointF point1 = new PointF(50.0F, 50.0F); PointF point2 = new PointF(100.0F, 25.0F); PointF point3 = new PointF(200.0F, 5.0F); PointF point4 = new PointF(250.0F, 50.0F); PointF point5 = new PointF(300.0F, 100.0F); PointF point6 = new PointF(350.0F, […]

GDI + MeasureString()错误地修剪文本

我正在尝试完成可以在屏幕上布局文本的代码。 以下C#代码放在一个空的Windows窗体的Paint事件处理程序中是一个例子: string[] s = new string[] { “Sample text “, “to test”, ” this layout “, “algorithm” }; PointF[] pts = new PointF[s.Length]; PointF start = new PointF(10, 10); StringFormat f = new StringFormat(StringFormat.GenericTypographic); float x = start.X; float y = start.Y; for (int i = 0; i < pts.Length; i++) { pts[i] = […]

扩展GDI +中支持的图像格式列表

引用System.Drawing.Imaging命名空间的文档 Encoder类使用户能够扩展GDI +以支持任何图像格式。 然而,我找不到任何文档,示例或其他任何解释我如何实现自己的自定义文件格式的内容 – 大多数搜索都会返回有关传递EncoderParameters的大量信息,但是没有实现我们自己的编码器的信息? 理想情况下,我希望能够在C#中实现这一点,但如果需要,我准备将我的ATL清除掉:) 有没有人遇到任何文档或能够提供有关如何处理此问题的任何指示? 更新: 我应该提到我迄今为止尝试过的事情,但无济于事: 寻找在ImageCodecInfo类中返回的GUID以查看它是否是一个普通的COM接口(但它似乎不是),目的是查看已实现的接口,或者查看它是否只是一个注册表项。 步入Image.FromFile方法,发现它只是gdiplus.dll的包装器 大量的Google搜索,似乎提供了大量使用现有的搜索,并指定了您自己的ImageEncoderParamerters; 还有一些人通过其他方式实现自己的 编解码器 。 甚至在新闻中询问://microsoft.public.win32.programmer.gdi

GDI +:将所有像素设置为给定颜色,同时保留现有的alpha值

将System.Drawing.Bitmap中每个像素的RGB分量设置为单一纯色的最佳方法是什么? 如果可能的话,我想避免手动循环每个像素来执行此操作。 注意:我想保留原始位图中的相同alpha分量。 我只想改变RGB值。 我研究了使用ColorMatrix或ColorMap ,但我找不到任何方法可以使用任何一种方法将所有像素设置为特定的给定颜色。

如何测量对角线距离点?

我可以计算水平和垂直点,但我无法弄清楚如何使用对角点计算距离。 有人可以帮我弄这个吗。 这是我的水平和垂直测量的代码: private float ComputeDistance(float point1, float point2) { float sol1 = point1 – point2; float sol2 = (float)Math.Abs(Math.Sqrt(sol1 * sol1)); return sol2; } protected override void OnMouseMove(MouseEventArgs e) { _endPoint.X = eX; _endPoint.Y = eY; if (ComputeDistance(_startPoint.X, _endPoint.X) <= 10) { str = ComputeDistance(_startPoint.Y, _endPoint.Y).ToString(); } else { if (ComputeDistance(_startPoint.Y, _endPoint.Y) <= 10) […]

.NET GDI +中的字体大小差异?

我试图理解用户选择或指定的字体大小(例如,使用FontDialog )与.NET中Font类报告的em-size之间的差异,这让我绞尽脑汁。 例如: using (FontDialog dlg = new FontDialog()) { if (dlg.ShowDialog() == DialogResult.OK) { Console.WriteLine(“Selected font size: ” + dlg.Font.SizeInPoints.ToString(“0.##”)); } } 使用上面的代码,您将得到一些令人困惑的结果: 在对话框中选择11将产生11.25 在对话框中选择12将产生12 在对话框中选择14将产生14.25 在对话框中选择16将产生15.75 无论您选择哪种字体,都会出现此问题。 从上面可以看出,差异中没有模式,它似乎在+0.25和-0.25之间随机变化。 我只是通过将字体大小显示为舍入的整数来解决这个问题,但我发誓我已经看到了允许用户选择小数字体大小的文字处理/ DTP包 – 而且这些包没有显示上述行为与Windows字体对话框交互时。 任何人都可以为此提供合理的解释吗? 是否有最佳实践技术在UI中显示字体大小? 当用户想要像“10 .5”这样的小数时,怎么样?

如何测量给定字体/大小(C#)中数字的像素宽度

我正在尝试使用OpenXML规范中的官方公式计算Excel列的像素宽度,如本文所述。 但是,为了应用这个公式,我需要知道Normal字体的最大数字宽度 ,它是最宽数字的像素宽度。 OpenXML规范给出了这个例子作为澄清: 以Calibri字体为例,11磅字体的最大数字宽度为7像素(96 dpi)。 我通过目视检查一个Calibri 11点数字检查这是正确的,它确实是7像素宽。 所以,我正在尝试创建一个方法,它将返回任何字体/大小的最大数字宽度。 我已经按照这个问题提出的建议,但它没有产生我期待的结果。 这是我的测试代码: var font = new Font(“Calibri”, 11.0f, FontStyle.Regular); for (var i = 0; i < 10; i++) { Debug.WriteLine(TextRenderer.MeasureText(i.ToString(), font)); } 这会报告所有数字的宽度均为15。 有什么建议吗? 蒂姆,谢谢

在.Net中概述GDI +的路径

如何使用GDI +概述图形路径? 例如,我将两个相交的矩形添加到GraphicsPath。 我想仅绘制此结果图形路径的轮廓。 请注意,我不想填充该区域,我只想绘制轮廓。 例:

没有外部dll的图像负片的有效方法

这是一个解决方案,使C#Windows窗体中的图像没有任何dll并以有效,快速的方式产生负面影响?