Tag: 绘制

在C#Winforms中的DataGridViewCell内绘制一个实心圆或矩形

我想在DataGridViewCell的中心绘制一个小圆圈。 矩形也可以做到这一点。 我假设我必须在CellPainting事件中这样做。 我试过这个: if (e.RowIndex >= 0 && e.ColumnIndex >= 0) { if (dgv_Cuotas.Columns[e.ColumnIndex].Name == “Seleccionar” && Convert.ToBoolean(dgv_Cuotas.Rows[e.RowIndex].Cells[“pagada”].Value) == true) { e.CellStyle.BackColor = Color.LightGray; ; e.PaintBackground(e.ClipBounds, true); e.Handled = true; } } 它绘制了整个单元格,我只想要一个小圆圈或矩形,如下图所示: 我怎样才能做到这一点? 使用DataGridViewImageCell不是一个选项,因为我有格式错误。 我只能将DataGridViewCheckBoxCell更改为DataGridViewTextboxCell。 编辑:我可以将其更改为DataGridViewImageCell !! 不知道之前发生了什么,但我仍然无法在那里加载图像。 我只得到一个带红叉的白色方块(无图像图标)。 这是我的代码: dgv_Cuotas.Rows[row.Index].Cells[“Seleccionar”] = new DataGridViewImageCell(); dgv_Cuotas.Rows[row.Index].Cells[“Seleccionar”].Value = Properties.Resources.punto_verde; dgv_Cuotas.Rows[row.Index].Cells[“Seleccionar”].Style.ForeColor = Color.White; dgv_Cuotas.Rows[row.Index].Cells[“Seleccionar”].Style.SelectionForeColor = Color.White;

根据输入坐标绘制多边形

如何根据C#中给出的输入坐标绘制多边形。

在C#中透明面板中绘制一条移动线

在这方面似乎有一百万个问题,但我找不到一个可行的问题。 所以,我想这是问题1,000,001的时间。 我有一个带有PictureBox和Panel的自定义控件。 Panel是PictureBox的孩子,具有透明背景。 这允许我绘制在PictureBox加载的任何图像的顶部。 绘图部分有效,但擦除部分没有。 如果我使用Invalidate()我只会得到一堆闪烁,并且该行甚至都没有显示。 如果最终目标不明显,它应该像任何体面的绘图应用程序一样工作,在那里你点击一个点,拖动,然后用鼠标移动线直到你松开。 码: private void drawLine(Point pt) { // Erase the last line if (m_lastPoints != null) { m_graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy; m_graphics.DrawLine(m_transPen, m_lastPoints[0], m_lastPoints[1]); } // Set the last points m_lastPoints = new Point[] { m_mouseStartPoint, pt }; m_graphics.DrawLine(new Pen(m_color), m_mouseStartPoint, pt); } m_transPen定义为new Pen(Color.FromArgb(0, 0, 0, 0)); m_transPen […]

Bitmap.Save上的ASP.NET错误“exception(0x80004005):GDI +中发生了一般错误。”

我有一个function,首先从磁盘读取图像,resize,然后保存到另一个目录。 当我使用Bitmap.Save(目录+ theimagename)时,它返回错误,如我在问题标题中所述。 我检查了目录是否正确,并且该目录中不存在给定的图像名称。 奇怪的是,相同的代码在本地机器上运行良好。 但是当我将它上传到我的共享主机空间时,它只是不起作用。 代码如下。 bmpOut = new Bitmap(Size, Size); Graphics g = Graphics.FromImage(bmpOut); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.FillRectangle(Brushes.White, 0, 0, Size, Size); int topBottomPadding = 0; int leftRightPadding = 0; if (Size > lnNewWidth + 1) leftRightPadding = Convert.ToInt32((Size – lnNewWidth) / 2); else if (Size > lnNewHeight + 1) topBottomPadding = Convert.ToInt32((Size […]

使用C#.NET 3.5 WinForms进行部分透明化?

我正在制作一个.NET 3.5应用程序,其表单绘制部分透明的黑色背景。 我正在重写OnPaintBackground来实现这个目标: protected override void OnPaintBackground( PaintEventArgs e ) { using ( Brush brush = new SolidBrush( Color.FromArgb( 155, Color.Black ) ) ) { e.Graphics.FillRectangle( brush, e.ClipRectangle ); } } 它可以工作,但偶尔表格会在不清除屏幕的情况下自行绘制,使透明度比应有的更深。 我曾尝试使用Graphics.Flush()和Graphics.Clear() ,但它无法帮助或完全删除透明度。 有什么建议? 编辑:在左侧启动应用程序后,以及在右侧重新绘制表单几次(以响应从一个控件到另一个控件的选项卡)后,它的外观如下: 透明度问题http://www.quicksnapper.com/files/5085/17725729384A10347269148_m.png 编辑2:我今天早上尝试了一些事情并注意到当透明部分后面的桌面发生变化时,实际上并没有重新绘制。 例如,如果我打开任务管理器并将其放在窗口后面,您就不会看到它自己刷新。 这与我在透明度水平上所看到的一样有道理。 是否有一个function可以让Windows重绘窗口后面的区域? 编辑3:我尝试更改窗体上的一些属性,但它们都导致窗体绘制非透明黑色: this.AllowTransparency = true; this.DoubleBuffered = true; this.Opacity = .99; 我将尝试为透明部分创建一个单独的窗口,如上所述,但仍然欢迎任何其他想法。

将位图保存为32bpp不会保持透明度

using (var bmp = new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb)) using (var g = Graphics.FromImage(bmp)) { g.Clear(Color.Transparent); g.DrawImage(image, 0, 0); bmp.Save(“image.bmp”, ImageFormat.Bmp); } 问题应该是明确的:为什么保存到BMP 会将透明度变为黑色 ,而保存到PNG 会保留它 ? 只是为了澄清: 图像采用Format8bppIndexed格式,其调色板确实包含透明色(例如,它正确地绘制在窗体/图片框上) 编辑:我的错, Bitmap.Save()实际上以Format32bppRgb格式保存BMP,即使位图格式是Format32bppArgb 。

在Winforms应用程序中填充橡皮筋

如何在不透明度为0.3的窗体上绘制零不透明橡皮筋? (橡皮筋是在微软的例子之后制作的 更新: 我需要那个橡皮筋来做像面具一样的东西。 如果您使用Jing或任何其他屏幕截图工具,您将在尝试制作屏幕截图时完全看到我需要做的事情:屏幕变为半透明,当您进行选择时,您将看到0不透明度选择

如何在WPF Canvas上绘制网格线?

我需要在WPF中在canvas上构建一个绘制网格线的函数: void DrawGridLine(double startX, double startY, double stepX, double stepY, double slop, double width, double height) { // How to implement draw gridline here? } 我怎么会这样呢?

为什么我的坐标(1,1)从(0,1)开始?

我重写了边框控件,在我的重写OnRender中我做了: protected override void OnRender(System.Windows.Media.DrawingContext dc) { this.SnapsToDevicePixels = true; this.VisualEdgeMode = EdgeMode.Aliased; var myPen = new Pen(new SolidColorBrush(Colors.LightGray), 1); dc.DrawLine(myPen, new Point(1, 1), new Point(1, RenderSize.Height – 1)); return; 哪个给我这个结果: 题: 是否有人可以告诉我为什么我的代码从(0,1)开始绘制一条线,而假设从(1,1)开始就像用代码编写的那样? 我的DPI是96,96。 对于ref,这是我的xaml:

在.NET中绘制文本

我正在做一些关于在.Net中绘制文本的测试,我得到了以下结果。 第一个字符串是本机Label, FlatStyle设置为System 第二个字符串使用Graphics.DrawString()方法绘制 最后一个是使用TextRenderer.DrawText()方法绘制的 所有情况都使用默认的Windows Vista / 7字体:Segoe UI,9 如您所见,第二个字符串与其他字符串之间存在差异(质量较低,反别名不同)。 我试图在Graphics对象中配置反别名和平滑模式,没有任何结果。 是否可以绘制文本使用Graphics.DrawString并获得与其他方法相同的质量? 提前致谢。 编辑:我已经使用Reflector审查了代码。 我意识到Graphics.DrawString使用gdiplus.dll调用方法GdipDrawString()和TextRenderer.DrawText使用user32.dll调用DrawTextExW和DrawTextExA 。 有什么评论吗?