Tag: 图形

我什么时候需要在图形上使用dispose()?

我正在学习用C#绘制东西,我一直看到使用dispose()的建议,但我不太明白它的作用。 我什么时候应该在代码绘制的图形上使用dispose()? 如果我不这样做会怎么样? 每次图形不可见时是否需要调用它,例如在具有选项卡且用户切换到其他选项卡的GUI上,然后在切换回时重绘它? 如果我不打电话,我会打破它吗? 蝙蝠侠会逃脱小丑的邪恶魔掌吗?

预乘alpha合成

我正在尝试实现预乘alpha混合。 在此页面上: 什么是颜色混合? ,他们确实解释了标准的alpha混合,但没有解释预乘的值。 Alpha混合:(来源×Blend.SourceAlpha)+(目的地×Blend.InvSourceAlpha) 根据公式,它转换为: a = ((srcA * srcA) >> 8) + ((tgtA * (255 – srcA)) >> 8); r = ((srcR * srcA) >> 8) + ((tgtR * (255 – srcA)) >> 8); g = ((srcG * srcA) >> 8) + ((tgtG * (255 – srcA)) >> 8); b = ((srcB * […]

C#:使用透明度将一个位图绘制到另一个位图上

我有两个位图,名为largeBmp和smallBmp。 我想将smallBmp绘制到largeBmp上,然后将结果绘制到屏幕上。 SmallBmp的白色像素应该是透明的。 这是我正在使用的代码: public Bitmap Superimpose(Bitmap largeBmp, Bitmap smallBmp) { Graphics g = Graphics.FromImage(largeBmp); g.CompositingMode = CompositingMode.SourceCopy; smallBmp.MakeTransparent(); int margin = 5; int x = largeBmp.Width – smallBmp.Width – margin; int y = largeBmp.Height – smallBmp.Height – margin; g.DrawImage(smallBmp, new Point(x, y)); return largeBmp; } 问题是,只要smallBmp透明,结果就会变得透明! 我只是想看看bigBmp,而不是它背后的内容。

C#中的简单游戏只有本机库

我可以找到一组java 2D游戏教程和Android游戏教程 ,它们只使用原生图形库 。 我在C#中寻找类似的东西(没有DirectX或XNA) 我发现这个游戏循环骨架 ,但它没有告诉如何渲染图形。 目标是模拟一个简单的电子设备。 当用户快速按下键盘上的某些键时,我需要显示一些图形输出。这看起来像街机游戏。 例如,当用户按下其中一个箭头键时,指针(图像)将相应地移动。 我想我不能用典型的Windows Forms Application做到这一点吗? 例如,使用PictureBox控件并将其移动到Form KeyPress事件中。

如何在WPF中尽可能高效地绘制图形

我正在创建一个严重依赖图节点树的工具。 当前的实现是用Java完成的,我将它移植到C#上的通用代码库中,因此它可以被各种渲染实现使用,也因为我想使用WPF的强大function来实现用户友好的界面。 浏览了一天之后,我遇到了各种方法来通过WPF绘制矢量图形。 这个人讲的是WPF开发人员可以选择的不同层。 因为我想首先使用WPF PURELY进行渲染,所以我希望使用“Visual Layer”。 然后我遇到了类似的东西: DrawingVisual , GeometryDrawing , FrameworkElement / UIElement / Shapes 所以,我对所有不同的实现有点不知所措,这些实现最终以完全不同的方式完成相同的操作。 Graph-Node库已经用它的所有逻辑(包括碰撞检测和用鼠标拖动)移植到C#。 因为它是用图形渲染器(如XNA,SlimDX,OpenTK等)制作的,所以在性能方面实现WPF渲染器的最佳方式(如同,它将绘制图形库告诉它的任何东西)画画? 基本上,生成的WPF控件充当canvas,但它必须是SUPER轻量级,除了为我提供绘制圆圈,线条和其他形状的方法之外,没有任何简洁的WPFfunction:) 编辑: 我基本上想知道:要走的路是什么? 我是否将Canvas扩展为我的图形的“主机”,然后添加我的UIElement的自定义实现? 或者我可以拥有一个可以绘制一切的课程(例如,一个超级超级超级图形)。 就像重写GDI中的OnPaint或Java中的Paint-method(它为Graphics对象提供所有function)。

获取由两个矩形的交集定义的线段的端点

我在两个平面之间的交叉线上尝试了算法 但都没有返回正确的结果 我有三个3D矩形,每个由三个点定义,我想得到交叉线上的两个点,这样在交叉点末端的两个点我做了以下步骤: 使用三个点将每个矩形转换为两个平面 通过每个平面法线的叉积来得到线方向 我想获得位于飞机边界上的线的实际终点 最好的祝福

删除位图的黑色背景颜色

我需要在C#VS2013中删除位图的黑色背景颜色。 就像我在canvas上画一些点一样。 canvas是黑色的,我只需要将canvas更改为透明,同时在其上保留彩色点而不做任何更改。 我得到了解决方案: 如何从Bitmap中删除白色背景颜色 Bitmap capcha = new Bitmap(@”C:/image.png”); capcha.MakeTransparent(Color.Black); 但是,背景仍有灰色,如覆盖图像上的点的雾。 如何删除它? 更新我使用的代码: ImageAttribute imageAttribute = new ImageAttribute(); imageAttribute.SetGamma(0.5f, ColorAdjustType.Bitmap); gr.DrawImage(img, new Rectangle(0, 0, img.Width, img.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, imageAttribute ); 我有同样的事情。 更多C#代码更新以绘制图像: System.Drawing.Bitmap canvasImage = new System.Drawing.Bitmap(xSize, ySize, System.Drawing.Imaging.PixelFormat.Format32bppArgb); canvasImage.MakeTransparent(Color.Black); Graphics g = Graphics.FromImage(canvasImage); System.Drawing.Bitmap tempImage = myDrawImageFunction(myPoints); g.Clear(Color.Transparent); // this […]

清除透明面板C#的图形

我有一个WebBrowser控件,顶部有一个透明面板,我要做的是在透明面板上围绕鼠标hover在页面中的元素上绘制一个矩形。 到目前为止,我已经完成了所有工作,除了在绘制下一个矩形之前没有清除面板,所以我到处都是矩形。 inheritance人使用的代码。 paneGraphics = drawingPane.CreateGraphics(); Rectangle inspectorRectangle; inspectorRectangle = controller.inspectElement(); paneGraphics.DrawRectangle(new Pen(Color.Blue, 1), inspectorRectangle); drawingPane.Invalidate(); 我尝试过使用drawingPane.clear(),但只是将屏幕变为白色。

将面板打印到打印机

我正在尝试将面板(及其内容)打印到打印机。 我在网上看到了不同的post,但我无法打印面板并获得正确的尺寸。 面板打印得非常大,并不像预期的那样。 例如,我想打印一个面板,输出尺寸为80mm X 40mm: private void Print_Click(object sender, EventArgs e) { int pixelsWidth = 300; // 300 pixels= ~8cm int pixelsHeight = 150; // 150 pixels= ~4cm panelLabel.Size = new Size(pixelsWidth,pixelsHeight); PrintPanel(); } private void PrintPanel() { System.Drawing.Printing.PrintDocument doc = new PrintDocument(); doc.PrintPage += new PrintPageEventHandler(doc_PrintPage); doc.Print(); } private void doc_PrintPage(object sender, PrintPageEventArgs […]

带有底部边框的TextBox

我希望TextBox具有底部边框,但由于Color.Transparent为TextBox绘制的图形在resize时会扭曲/损坏。 使用我发现的代码,我能够创建一个带下划线的TextBox(带有透明顶部,左侧,右侧的绘制矩形)。 问题是当我调整窗体/窗口的大小时:当我将其调整为较小,然后再次resize以扩展它时,绘制的图形会失真。 对此有任何修复? 这是照片: 第二张照片已经调整得更小,然后又回到更大的尺寸。 这是代码: [DllImport(“user32”)] private static extern IntPtr GetWindowDC(IntPtr hwnd); struct RECT { public int left, top, right, bottom; } struct NCCALSIZE_PARAMS { public RECT newWindow; public RECT oldWindow; public RECT clientWindow; IntPtr windowPos; } float clientPadding = 0; int actualBorderWidth = 2; Color borderColor = Color.Black; protected override void WndProc(ref […]