Tag: gdi +

鼠标进入/离开时WM_PAINT中绘制的TextBox闪烁

我有一个自定义的TextBox,当它为空时我在其中绘制一些占位符文本。 它运行得很好,但是当鼠标进入和离开TextBox时它会闪烁。 当鼠标hover在控件上时(我在Windows 8.1上),它似乎与边框变成蓝色有关。 知道如何解决这个问题吗? 我尝试了各种SetStyles标志但没有成功。 class MyTextBox : TextBox { public string PlaceHolder { get; set; } static readonly Brush sPlaceHolderBrush = new SolidBrush(Color.FromArgb(70, 70, 78)); static readonly StringFormat sFormat = new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center }; private Font mPlaceHolderFont; [DllImport(“user32”)] private static extern IntPtr GetWindowDC(IntPtr hwnd); protected override void […]

擦除透明度

所以我试图让32×32块恢复透明,但每次我尝试将其设置为透明它只保留已经存在的东西,我想要删除图像上的内容为透明,这是我试过的代码。 public Bitmap erase_tile(Bitmap bitmap, int x, int y) { Graphics device = Graphics.FromImage(bitmap); Brush brush = new SolidBrush(Color.FromArgb(0, Color.White)); device.FillRectangle(brush, new Rectangle(x * 32, y * 32, 32, 32)); return bitmap; }

如何调试误导性的GDI OutOfMemoryexception?

我有一个调整位图大小的函数。 这是一个“面包和黄油”操作,我只是从另一个项目复制它: private Bitmap ResizeBitmap(Bitmap orig) { Bitmap resized = new Bitmap(this.Xsize, this.Ysize, PixelFormat.Format16bppGrayScale); resized.SetResolution(orig.HorizontalResolution, orig.VerticalResolution); using (Graphics g = Graphics.FromImage(resized)) { g.DrawImage(orig, 0, 0, resized.Width, resized.Height); } return resized; } 但是,我一直在Graphics g = Graphics.FromImage(resized)上获得OutOfMemoryexception。 我知道, 当谈到GDI时,OutOfMemoryexception通常会掩盖其他问题 。 我也非常清楚我想要resize的图像并不大(据我所知)GC在离开当前范围时应该没有问题收集实例。 无论如何,我现在已经玩了一段时间它现在看起来像这样: private Bitmap ResizeBitmap(Bitmap orig) { lock(orig) { using (Bitmap resized = new Bitmap(this.Xsize, this.Ysize, PixelFormat.Format16bppGrayScale)) […]

如何生成动态C#图像?

基本上,我想重新编写以前用PHP编写的VisualCube 。 我研究了GDI +,试图找到处理C#,图形等的书籍。 一些相关的东西只针对WinForms或WPF,而我理想的是想要创建一个提供图像的WebAPI或WCF服务。 我可以使用哪些技术? 如果是GDI +,有人可以在WebAPI / WCF中为我提供用法吗? 我将通过MVC4访问WebAPI / WCF。

更新图像文件中的EXIF信息

我需要在很多.png文件(成千上万的招聘图片)中更新EXIF信息,我想知道是否有一些(不太复杂和记录)的方式,我可以做到这一点,而无需打开(解压缩整个图像)和然后重新保存(再次压缩)?

为什么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, […]

在3D空间中旋转图像的一部分

这是设置:这是一个电子商务艺术网站,其中一些画作是canvas转移。 画作环绕canvas的两侧和顶部和底部。 我们拥有整幅画的高分辨率图像,但我们想要展示的是图像的准3D表示,您可以在其中看到画面的两侧如何环绕canvas。 这是我正在谈论的粗略草图: 我的问题是,如何在3D空间中旋转图像? 我认为我想采取的方法是切掉图像的顶部和侧面的一部分,然后在3D中旋转,然后将其重新贴在顶部和侧面以使其具有3D外观。 我该怎么做呢? 它可以使用任何.Net技术(GDI +,WPF等)来完成。

如何在c#中绘制2d等高线图?

我主要对算法感兴趣,这使我可以将Point3D []转换为可绘制的gdi线?

如何将CF_DIBV5从剪贴板(Format17)转换为透明位图?

GDI +不支持CF_DIBV5格式但是当几个应用程序将透明图像放到剪贴板时,它们使用CF_DIBV5 (格式17)格式来维护Alpha通道。 .NET Framework无法处理CF_DIBV5格式,因此.NET应用程序无法在剪贴板中放入或检索alpha映像。 是否有任何c#代码支持从剪贴板转换CF_DIBV5到Bitmap?

跟踪栏上的触发事件ValueChanged,但不在代码中

我希望能够在代码中修改跟踪栏的value属性而不触发我的事件处理程序。 我希望仅在用户通过拖动滑块或使用键盘移动控件来更改控件时触发事件。 实现这一目标的最简单方法是什么? 我有6个轨道栏,我想根据更改的轨迹栏更改其中3个的值。 问题是更改这些跟踪栏的值将触发其ValueChanged事件。