Tag: gdi +

GDI +曲线“溢出”

我目前正在使用GDI +绘制折线图,​​并使用Graphics.DrawCurve来平滑线条。 问题是曲线并不总是与我提供的点匹配,这使曲线在某些点上长出图形框架,如下所示(红色是Graphics.DrawLines ,绿色是Graphics.DrawCurve )。 我该如何解决这个问题?

转换后的图像不清晰。 wmf到png

我正在尝试使用c#.net将wmf图像文件转换为png格式。 但是,保存的图像不清楚,如下所示 http://sofzh.miximages.com/c%23/ header.DpiY 100)); using(Graphics g = Graphics.FromImage(bitmap)){ g.DrawImage(img, 0, 0); } bitmap.Save(test.png”, ImageFormat.Png); 我怎么能弄清楚?

在调用GDI文本函数后如何修复alpha值?

我有一个使用Aero玻璃效果的应用程序,因此除红色,绿色和蓝色值外,每个像素都有一个alpha值。 我有一个自定义绘制控件,具有纯白色背景(alpha = 255)。 我想使用GDI文本函数在控件上绘制纯文本。 但是,这些函数将alpha值设置为任意值,导致文本半透明地显示我的应用程序下面的任何窗口。 在调用渲染文本之后,我想通过控件中的所有像素并将其alpha值设置回255.这样做的最佳方法是什么? 我对BitBlt , GetPixel和SetPixel函数没有任何好运。 他们似乎忘记了阿尔法值。 以下是我考虑和拒绝的其他解决方案: 绘制到位图,然后将位图复制到设备:使用此方法,文本渲染不会使用监视器的特征(例如,ClearText)。 如果您知道一种方法可以让GDI将文本渲染到位图, 就像渲染到屏幕一样,这也可以解决我的问题。 使用GDI +进行文本呈现:此应用程序最初使用GDI +进行文本呈现(在我开始使用Aero支持之前)。 由于我在尝试使用GDI +精确测量字符串时遇到困难,我切换到GDI。 我宁愿不回头。 设置Aero区域以避免相关控件:我的应用程序窗口实际上是在不同进程中运行的不同应用程序的子窗口。 我无法直接控制顶级窗口上的Aero设置。 该应用程序是使用Windows Forms以C#编写的,尽管我上面没有使用Interop来调用Win32 API函数。

拖动时突出显示矩形区域

我正在创建一个图像查看器的应用程序。 我在Windows上使用.Net 在我的应用程序中,我试图在拖动时突出显示特定区域。 我创建了一个Rectangle。 Rectangle areaRect = new Rectangle(100,100, 300, 300); Point ptOld = new Point(0, 0); Pen rectPen = new Pen(Brushes.White, 3); protected override void OnPaint(PaintEventArgs e) { Graphics dcPaint = e.Graphics; dcPaint.DrawRectangle(rectPen, areaRect); } 现在我拖动这个矩形区域以及我的鼠标移动。 protected override void OnMouseMove(MouseEventArgs e) { Point ptNew = new Point(eX, eY); int dx = ptNew.X – ptOld.X; […]

TextRenderer with Graphics变换

我一直在研究自定义控件,我遇到了一个问题,TextRenderer的表现有些令人惊讶。 在我的OnPaint事件中,我将变换应用于Graphics对象以补偿滚动位置,如下所示: e.Graphics.Transform = new System.Drawing.Drawing2D.Matrix(1, 0, 0, 1, this.AutoScrollPosition.X, this.AutoScrollPosition.Y); 然后我将图形对象传递给控件的所有子元素,以便它们自己绘制到它上面。 其中一个元素应该将文本字符串绘制到图形表面上。 这就是我遇到问题的地方。 滚动时,此行似乎正常工作: e.Graphics.DrawString(this.Text, this.Font, brush, new PointF(this.Rectangle.X, this.Rectangle.Y)); 但是当我使用TextRenderer时,我得到了完全不同的结果。 下面是应该绘制文本的文本行: TextRenderer.DrawText(e.Graphics, this.Text, this.Font, this.Rectangle, this.TextColor, TextFormatFlags.PreserveGraphicsClipping | TextFormatFlags.PreserveGraphicsTranslateTransform); 我认为这两行应该产生相同的结果。 但由于某种原因,第二个应用不同的图形变换,因此,当我滚动控件时,所有文本行以不同于绘图表面上其余元素的速度移动。 有人可以解释一下为什么会这样吗?

旋转图像而不用GDI +剪切边缘的最快方法是什么?

这样做有一些looooong和饥饿的算法,但到目前为止我还没有提出或发现任何特别快的事情。

C#控制台应用程序 – 如何使用GDI +绘制BMP / JPG文件?

我想使用C#控制台应用程序和GDI +在BMP或JPG文件中绘制矩形,箭头,文本,行等形状。 这是我在网上找到的: c#save System.Drawing.Graphics to file c#save System.Drawing.Graphics to file GDI + Tutorial for Beginners http://www.c-sharpcorner.com/UploadFile/mahesh/gdi_plus12092005070041AM/gdi_plus.aspx Professional C# – Graphics with GDI + codeproject .COM /用品/ 1355 /专业-C-图形与 – GDI 但这仍然无法帮助我。 其中一些链接仅针对Windows窗体应用程序解释了这一点,其他链接仅供参考(MSDN链接),仅解释GDI +中的类,方法等。 那么如何使用C#控制台应用程序绘制图片文件? 谢谢!

在C#中旋转Hue

我想复制这里找到的CSS3色调旋转行为 原始图像 色调旋转180度的图像 我已经可以准确地将RGB值转换为HSL值并再次返回,但我不确定要应用于hue组件来复制输出的数学函数是什么。

使用GDI +使用不同颜色绘制线条的快捷方法?

我有一个动态List of Point,可以随时添加新Point。 我想绘制线条以使用不同的颜色连接它们。 颜色基于这些点的索引。 这是代码: private List _points; private static Pen pen1 = new Pen(Color.Red, 10); private static Pen pen2 = new Pen(Color.Yellow, 10); private static Pen pen3 = new Pen(Color.Blue, 10); private static Pen pen4 = new Pen(Color.Green, 10); private void Init() { // use fixed 80 for simpicity _points = new List(80); […]

桌面屏幕叠加 – 新forms的闪烁问题

作为我的开源DeskPins 克隆的一部分 (两个单独的链接,一个用于原始,一个用于GitHub上的克隆),我需要允许用户与桌面交互。 我认为最简单的方法是打开一个新表单并在其上绘制桌面内容。 然后我应该能够轻松设置鼠标光标并为用户提供关于当前焦点的窗口的视觉提示。 更复杂的替代方法是使用p / invoke到SetSystemCursor并在其他窗口的WM_PAINT事件队列中注入自定义代码(以及可能的其他WinApi相关工作,例如,如果我的程序exception终止,则游标清理将是一个问题)。 我不想这样做。 我下面的代码正在工作,唯一的问题是屏幕闪烁 。 设置DoubleBuffered = true后,它变得更好(而不是屏幕闪烁,它变成了父窗体闪烁 ),但仍然很明显。 所以现在每次打开叠加表单时我的表单都会闪烁。 我能做些什么来使它平稳过渡,就好像新窗口没有打开一样? 有一个“冻结”效果是可以的=任何动画都会被暂停。 public sealed partial class DesktopOverlayForm : Form { public DesktopOverlayForm() { InitializeComponent(); //make full screen //http://stackoverflow.com/a/2176683/897326 Rectangle bounds = Screen.AllScreens .Select(x => x.Bounds) .Aggregate(Rectangle.Union); this.Bounds = bounds; //set desktop overlay image this.BackgroundImage = MakeScreenshot(); } /// /// […]