Tag: drawing

当用户绘制的控件大小增加时,新区域不会重新绘制

我想我在这里错过了一些微不足道的东西。 我直接从Control派生出简单的控件。 我正在重写OnPaint并绘制矩形( e.Graphics.DrawRectangle )和其中的文本( e.Graphics.DrawString )。 我没有覆盖任何其他成员。 当控件调整为较小的尺寸时,它会很好地自我绘制,但是当它调整到更大的尺寸时,新区域不会被正确重新绘制。 一旦我再次将其调整为较小的尺寸,即使按一个像素,一切都正确重新绘制。 OnPaint被正确调用(适当的PaintEventArgs.ClipRectangle正确设置到新区域),但无论如何都不会绘制新区域(出现工件)。 我错过了什么? 编辑: 码: protected override void OnPaint(PaintEventArgs e) { // Adjust control’s height based on current width, to fit current text: base.Height = _GetFittingHeight(e.Graphics, base.Width); // Draw frame (if available): if (FrameThickness != 0) { e.Graphics.DrawRectangle(new Pen(FrameColor, FrameThickness), FrameThickness / 2, FrameThickness / 2, […]

Onpaint事件(无效)在句点正常操作(运行时)后更改执行顺序

我有3个数据图,通过他们的绘画事件绘制。 当我有需要插入图表的数据时,我调用controls invalidate()命令。 第一个控件的paint事件实际上为其他2个图创建了一个位图缓冲区,以避免重复长循环。 因此,invalidate命令按特定顺序(1,2,3)。 这很好用,但是当绘制的数据到达图形窗口(PictureBox)的末尾时,数据通常会开始滚动,绘制事件开始以错误的顺序触发(2,3,1)。 以前有人遇到过这个吗? 为什么会发生这种情况?

使用渐变颜色绘制矩阵“Spectrogram”

在使用STFT(短时傅立叶变换)之后,输出是表示3d图的矩阵,好像(A[X, Y] = M) A是输出矩阵,X是时间,Y是频率,并且第三维M是像素颜色强度所示的幅度,如下图所示: 谱图2 如何使用C#中的图片中的渐变颜色绘制输出矩阵A? 是否有一个包含C#频谱图控件的库? 更新: 在对给定算法进行一些修改后我可以绘制光谱图,我没有改变调色板,除了第一种颜色变为黑色但我不知道为什么它会褪色! 这个代表一种声音 再见 再见光谱图 而这是一个pure sine wave所以它几乎都是相同的频率 纯正弦波频谱图 输出被接受它表示输入信号的频率如预期的那样,但我认为有一种方法可以使光谱图像示例中的那样进行说明,请您查看我的代码并建议修改? 这是事件处理程序: private void SpectrogramButton_Click(object sender, EventArgs e) { Complex[][] SpectrogramData = Fourier_Transform.STFT(/*signal:*/ samples, /*windowSize:*/ 512, /*hopSize:*/ 512); SpectrogramBox.Image = Spectrogram.DrawSpectrogram(SpectrogramData, /*Interpolation Factor:*/ 1000, /*Height:*/ 256); } 这是我修改后的绘图function: public static Bitmap DrawSpectrogram(Complex[][] Data, int InterpolationFactor, int Height) { […]

如何使用Win2D(行间距)计算FontFamily的高度?

我想知道如何使用Win2D在Window Universal Application中计算给定字体的高度(具有其属性,如大小,重量,样式……) 。 我之前使用过CanvasTextLayout ,但它需要一个文本才能工作,就像在这一行: var ctl = new CanvasTextLayout(session, “Some text”, new CanvasTextFormat(), constraintWidth, constraintHeight ); 在我的情况下, 我将没有文本,因为我正在寻找的是给定字体的所有字形(其样式,大小,重量……)适合的高度。 编辑:我也尝试过CanvasFontFace类,但它似乎没有任何公共构造函数。

XNA – 以正确的顺序绘制四边形(和基元)

我对XNA中的3D内容很新,不幸的是我遇到了一个问题我无法找到解决方案。 (甚至不知道问题是什么)。 简而言之:我在游戏中使用以下方法绘制四边形: effect.World = Matrix.Identity * Matrix.CreateRotationX(Rotation.X) * Matrix.CreateRotationY(Rotation.Y) * Matrix.CreateRotationZ(Rotation.Z) * Matrix.CreateTranslation(Position); // Apply camera-matrixes effect.View = viewMatrix; effect.Projection = projectionMatrix; graphics.VertexDeclaration = vertDec; // Begin effect drawing effect.Begin(); foreach (EffectPass pass in effect.CurrentTechnique.Passes) { pass.Begin(); graphics.DrawUserIndexedPrimitives ( PrimitiveType.TriangleList, quad.Vertices, 0, 4, quad.Indexes, 0, 2); pass.End(); } effect.End(); 我的效果也有这些属性: this.effect.TextureEnabled = true; this.effect.Texture […]

如何将原始数据显示为图像(Visual Studio c#)

我将接收一些将存储在字节数组中的原始数据,其中每2个字节是一个像素值(16位/ px)。 首先,arrays将包含100×100 * 2字节(足以容纳100×100像素的图像)。 我想在窗体窗口中显示此数据。 最后,我想用新数据刷新图像,使其看起来像一个video流。 不需要严格的帧速率。 如何才能做到这一点? C#中的任何代码示例? 编辑:经过一些建议和审查数十个类似的问题,我仍然无法得到这个。 这是我想要做的一般概念,但图像不会显示在表单上的图片框中。 我的实施有什么特别的错误以及如何解决它 ? // array of data I collected byte[] dataArray = new byte[100 * 100 * 2]; //create a pointer to the data IntPtr hglobal = Marshal.AllocHGlobal(100 * 100 * 2); // copy my array to global Marshal.Copy(dataArray, 0, hglobal, dataArray.Length); // create […]

缩短一行像素数

我正在使用.NET GDI +绘制业务对象的自定义图表。 除此之外,该图由连接对象的几行组成。 在特定场景中,我需要将一条线缩短特定数量的像素,比方说10个像素,即找到线的终点之前10个像素的线上的点。 想象一个半径为r = 10像素的圆,以及一条带有起点(x1,y1)和终点(x2,y2)的直线。 圆圈以线的终点为中心,如下图所示。 插图http://sofzh.miximages.com/c%23/140b5w5.gif 如何计算用红色圆圈标记的点,即圆与线之间的交点? 这会给我一个新的终点,缩短10个像素。 解 感谢您的答案,我可以将以下程序放在一起。 我将它命名为LengthenLine,因为如果我想缩短线条,我发现传递负像素数更自然。 具体来说,我试图组合一个可以绘制圆角线的function,可以在这里找到。 public void LengthenLine(PointF startPoint, ref PointF endPoint, float pixelCount) { if (startPoint.Equals(endPoint)) return; // not a line double dx = endPoint.X – startPoint.X; double dy = endPoint.Y – startPoint.Y; if (dx == 0) { // vertical line: if (endPoint.Y […]

绘制图形的方法比绘制单独的线条更快捷的方法是什么?

截至目前,我正在绘制我的调试性能图,其中1px矩形被拉伸到必要的高度,但是以这种方式绘制大量数据会导致显着的性能损失。 目前的逻辑是:收集当前帧的所有时序,将它们放入Queue并通过绘制300个拉伸的1px精灵为每个队列绘制一个图形。 有4个图,因此仅在调试覆盖中有1200个精灵,这是资源消耗。 是否有更好的方法来绘制图表,至少不需要绘制这么多精灵?

如何在无边框表格上创建模糊玻璃效果?

如何在无边框表格上绘制平滑的模糊玻璃效果? 我已尝试使用C和GDI +页面在Image Processing for Dummies上列出的代码,但我确定这不是我应该使用的。 没有多少玩弄它已经产生了我所追求的任何结果。 这基本上就是我想要实现的目标:

在图片框中绘制颜色?

在C#我有一个图片框。 我想画4种颜色。 默认为白色,红色,绿色,蓝色。 如何在这个picbox中绘制这四种颜色? 或者我应该有4个picbox? 在这种情况下,我如何设置rgb颜色?