Tag: graphics

如何从C#中的绘制面板获取位图

我有一个面板,我使用它的Graphics gr = panel1.CreateGraphics()来绘制线条和其他东西。 我需要获得点击鼠标的点的像素颜色,所以我决定使用Bitmap的GetPixel方法。 我这样创建位图: Bitmap b = new Bitmap(width, height); panel1.DrawToBitmap(b, new Rectangle(0, 0, width, height)); b.Save(“D:/aaa.bmp”); 但即使我画了任何东西,我也只得到白色矩形。 有什么问题?

c#将图像(缩放)绘制到图形,不进行正确插值。 修复?

我的图像宽1px,有些高度。 我需要在它的OnPaint事件的控件的整个宽度上绘制这个图像。 我得到它画,但不正确。 看起来当它拉伸它时,它实际上并没有填满所有像素。 好像插值关闭了。 有没有办法说“停止聪明,只是画出来”? 我在图形对象的选项中看不到InterpolationMode.Off或.None。 我可以通过使用宽度为X的图像来确认我实际上绘制了整个宽度,其中X与控件的宽度相同。 然后当它绘制时,它正常覆盖整个区域。 然而,这个控件一直在resize,并且为了节省内存,所有使用1px宽图像的爵士乐在网络世界中是很正常的。 这适用于桌面C#应用程序。 有想法该怎么解决这个吗?

游戏开发 – 避免闪烁

我在winforms(C#和.netframework 2.0)中开发了类似游戏的俄罗斯方块。 winform有一个背景图像和一个向下移动的图片框(新的位置被分配),间隔为500毫秒。 问题是图片框在图片框之前定位的位置向下移动窗体闪烁的背景图像。 如果我不使用任何背景图像,则没有闪烁。 是否有任何图形加速器或任何类型的解决方案,使用它可以解决闪烁问题。

.NET – 围绕resize的图像边框

我正在尝试在.NET中调整图像大小,但在resize的图像周围会出现一个模糊的黑色边框。 我发现了一篇posthttp://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/cf765094-c8c1-4991-a1f3-cecdbd07ee15/ ,其中有人说目标矩形大于canvas工作,但这对我不起作用。 它有顶部和左边的边缘,但右边和底部仍然存在,并且是一个完整的1px厚的黑色。 我错过了什么吗? 我的代码如下。 Image image = … // this is a valid image loaded from the source Rectangle srcRectangle = new Rectangle(0,0,width, height); Size croppedFullSize = new Size(width+3,height+3); Rectangle destRect = new Rectangle(new Point(-1,-1), croppedFullSize); using(Bitmap newImage = new Bitmap(croppedFullSize.Width, croppedFullSize.Height, format)) using(Graphics Canvas = Graphics.FromImage(newImage)) { Canvas.SmoothingMode = SmoothingMode.AntiAlias; Canvas.InterpolationMode = […]

在WPF中命中测试

我在Canvas上有一个Ellipse ,我正在对其进行命中测试。 每次我点击Ellipse的笔划时,测试都会通过。 如果我单击Ellipse的中间,测试将失败。 这很好! 在我填充椭圆之后: myEllipse.Fill = new SolidColorBrush(Colors.Blue); ,当我点击Ellipse的中间时,测试pasess。 我怎么能禁用它? (即使Ellipse填充,当我点击中间时测试也会失败)谢谢!

如何在旋转canvas上精确绘制橡皮筋选择矩形?

这是在canvas上绘制的橡皮筋选择矩形。 我的问题是,如果canvas内容没有旋转,很容易获得正确的矩形大小。 但是一旦旋转,矩形就不再与光标一起变大。 我需要橡皮筋与屏幕保持平行 var dragPt = new PointF(e.Position.X – G.ReferenceOffset.X, e.Position.Y – G.ReferenceOffset.Y); var rotation = ADEEnvironment.RotateAngle; var width = (dragPt.X – pressPt.X); var height = (dragPt.Y – pressPt.Y); 代码非常简单。 我在鼠标按下时捕获鼠标的位置:pressPt。 在鼠标移动事件中,我得到当前鼠标位置dragPt并计算橡皮筋矩形的宽度和高度,并使用这些值创建一个矩形,其原点在pressPt上。 如果canvas的相机没有旋转,这可以正常工作。 当我旋转显示器时,我需要橡皮筋与屏幕保持对齐而不是绘制它的canvas。 它我只是留下它旋转绘制的橡皮筋。 如果我旋转橡皮筋矩形使其返回到与屏幕对齐,则矩形不再正确resize。 所以在经历了很多混乱之后我尝试了一些三角函数: var width = (float)((dragPt.X – pressPt.X) / Math.Cos(rotation)); var height = (float)((dragPt.Y – pressPt.Y) / Math.Cos(rotation)); 考虑到旋转角度可以是0> […]

如何在Windows 8 Metro界面上方绘制?

我想绘制将驻留在所有其他界面之上的图形,包括Windows 8新主屏幕。 你会怎么做呢? 对于Windows 7及更低版本,它就像显示透明的全屏窗口一样简单,但现在由于桌面与操作系统的其余部分分离,因此不再可能。 原因是我需要显示两个独立于Windows鼠标光标的游标。 我正在开发一个用于Wii遥控器的多点触控模拟软件(使用传感器条指针),目前我只需设置光标位置并通过抖动+1和-1像素唤醒它。 但它干扰了触摸,所以我必须在使用触摸模拟时禁用它。 它目前有效,但我想添加多点触控支持,以便您可以使用Wii遥控器进行缩放和旋转。 触摸function已准备就绪,但您可能希望在使用Wii遥控器时握住一个触摸点并选择另一个触摸点时看到光标,并且在按住第一个触摸点时,Windows光标无法移动到其他任何位置,因为它坚持触摸点。 我已经看到如何通过为屏幕获取Graphics对象直接绘制到屏幕,但它不起作用,因为它完全不受管理,因此图形保持可见,直到其他东西刷新该区域。 那么,有什么建议吗? 涉及的项目名为Touchmote,可在touchmote.net上作为源代码和可安装的beta版提供。

PDFsharp在图形下绘制文本

我正在使用PDFsharp从头开始生成PDF文档。 我试图在渐变填充矩形上面写文字。 生成文档后,渐变显示在文本顶部,使文本完全隐藏。 using (var document = new PdfDocument()) { var page = document.AddPage(); var graphics = XGraphics.FromPdfPage(page, XGraphicsPdfPageOptions.Append); graphics.SmoothingMode = XSmoothingMode.HighQuality; var bounds = new XRect(graphics.PageOrigin, graphics.PageSize); graphics.DrawRectangle( new XLinearGradientBrush( bounds, XColor.FromKnownColor(XKnownColor.Red), XColor.FromKnownColor(XKnownColor.White), XLinearGradientMode.ForwardDiagonal), bounds); graphics.DrawString( “Hello World!”, new XFont(“Arial”, 20), XBrushes.Black, bounds.Center, XStringFormats.Center); document.Save(“test.pdf”); document.Close(); } 如何在矩形顶部渲染文本? 我发现之后绘制的任何图像都会出现在矩形的顶部。 这是唯一隐藏的文字。

为什么Image.Clear(x)之后的颜色不完全等于颜色x?

此问题的示例代码在很大程度上是不言自明的,因此: [Fact] private void Color_in_should_equal_color_out() { var bitmap = new Bitmap(128,128,PixelFormat.Format32bppArgb); var color = Color.FromArgb(30,60,90,120); using (var g = Graphics.FromImage(bitmap)) { g.Clear(color); } var result = bitmap.GetPixel(0,0); Assert.Equal(color, result); } 在这种情况下,我希望背景的颜色与我清除它的颜色相同。 相反,我得到这个: Assert.Equal() Failure Expected: Color [A=30, R=60, G=90, B=120] Actual: Color [A=30, R=59, G=93, B=119] 这怎么可能呢? 一些通过: Color.FromArgb(0, 0, 0, 0); Color.FromArgb(255, 255, 255, […]

视口内图形相对于鼠标坐标的实际坐标

正如我在标题中指出的那样,我已经开始研究一个简单的应用程序,它包含在主框架窗口中,一个双缓冲面板。 在这个面板中可以绘制一些图形,让我们认为这个面板是内部绘制元素的简单视口。 这里添加了两个function,平移和缩放可以使用在MouseDown上更新的delta和Move事件以及OnMouseWheel更新缩放变换来缩放转换和转换内部转换内部的转换。 在尝试添加function以支持在视口内创建节点(图形元素)到缩放大于1(缩放100%)时的精确位置时,真正的问题已经到来。 场景1 – >黄色矩形已正确创建,并且位于鼠标指针位置,如下图所示(比例== 1)。 场景2 – >黄色矩形相对于鼠标位置高度移动,视口比例为aprox。 40%,如下图所示(比例== 1.4)。 红色填充的圆圈是鼠标按下的(光标位置保持不变,只进行了缩放)。 测试场景 – >在发布之前我尝试了很多方法而没有成功,这是其中之一: 我非常感谢任何类型的输入,甚至是与更改OXY图形方法相关的想法(因为翻译函数使用相对坐标)。