Tag: gdi +

使用gdi +进行半色调效果

我将如何在GDI +中模仿这种半色调效果? 它几乎看起来像Floyd-Steinberg抖动的图像覆盖了一个完整的图像,但我不相信。

检查图像是否有颜色

我想弄清楚图像是否有颜色。 在这个 StackOverflow问题上,有一个回复说我应该检查Image的PixelFormat枚举。 不幸的是,回复对我来说不是很清楚。 检查image.PixelFormat是否与PixelFormat.Format16bppGrayScale不同,是否可以安全地认为它是彩色图像? 枚举的其他值怎么样? MSDN文档不是很清楚……

使用GDI +将修改后的图像保存到原始文件

我正在从文件加载位图图像。 当我试图将图像保存到另一个文件时,我收到以下错误“GDI +中发生了一般错误”。 我相信这是因为文件被图像对象锁定。 好吧,试着调用Image.Clone函数。 这仍然会锁定文件。 哼。 接下来,我尝试从FileStream加载位图图像并将图像加载到内存中,这样GDI +就不会锁定文件。 这很好用,除了我需要使用Image.GetThumbnailImage方法生成缩略图,它抛出一个内存不足的exception。 显然我需要保持流打开以停止此exception,但如果我保持流打开,则文件保持锁定状态。 这种方法没有用。 最后,我创建了该文件的副本。 所以现在我有2个版本的文件。 1我可以在我的c#程序中锁定和操作。 这个其他原始文件保持解锁状态,我可以保存修改。 这样可以让我即使在保存后也可以恢复更改,因为我正在操作无法更改的文件副本。 当然有一种更好的方法来实现这一点,而无需拥有2个版本的图像文件。 有任何想法吗?

C#将FontDialog设置为仅显示TrueType字体

几乎每个论坛都会提出这个问题,包括这里,但我找不到任何可接受的答案。 我开始认为实际上没有解决方案,我只需要将我的代码包装在try / catch块中并向用户道歉并要求他们选择另一种字体。 我想显示一个FontDialog以便用户可以更改Chart上的字体,但是如果用户选择非TrueType字体,则会抛出exception。 GDI +只能处理TrueType字体。 如何过滤不能与GDI +一起使用的FontDialog中的字体?

如何在c#中添加文本到图标?

我想在系统托盘中显示一个图标[.ico文件],并在运行时添加一些文本。 是否有任何原生WPF方式可以做到这一点? 或GDI +的片段也将不胜感激。 谢谢。

myBitmap.RawFormat与任何已知的ImageFormat有什么不同?

我正在使用GDI +,我创建了一个像这样的新位图: var bmp = new Bitmap(width, height); 现在当我观察它的RawFormat.Guid时,我发现它与所有预定义的ImageFormats不同(我希望它是JPEG)。 ImageFormat.Jpeg.Guid {b96b3cae-0728-11d3-9d7b-0000f81ef32e} format.Guid {b96b3caa-0728-11d3-9d7b-0000f81ef32e} 有趣的是,你可以看到它们是相同的,除了一个让我更加困惑的角色。 知道为什么吗? 哪些代码部分决定了我创建的位图的RawFormat是什么? 我们如何确保它是一个有效的ImageFormat? 谢谢。

C#winforms:如何更改System.Drawing.BItmap的DPI?

我需要将System.Drawing.Bitmap对象的DPI从默认值= 96更改为例如150.我找不到答案如何做到这一点我在这里问:)

修改特定于打印机的配置对话框的属性

我们已经构建了一个自定义打印对话框,其中包含一个用于显示打印机特定对话框 我读了Shurup的 这个答案 ,它帮助我实现了这个目标。 ( 编辑:但它包含错误,如我的回答中所述) 但是,我们将其与存储的设置结合使用。 当我们用PrinterSettings调用方法时,它们会被忽略。 无论提供的设置对象如何,本机对话框都会显示其默认设置。 编辑:删除了我的失败代码。

如何使用MouseMove事件绘制单行

我正在尝试使用OnMouseMove()事件绘制一行。 我的问题是每次我移动鼠标都会留下痕迹。 我尝试使用刷新方法,但是当我停止移动鼠标时,线条消失了。 我不想要绘制OnPaint(); ,只想绘制它OnMouseMove() 。 编辑:我正在使用透明面板(cp.ExStyle | = 0x20;),所以我不能使用graphics.Clear()和BackColor() 这是没有Refresh()的示例图像: 这是我的代码: private void panel1_MouseMove(object sender, MouseEventArgs e) { Graphics g = panel1.CreateGraphics(); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; using (var p = new Pen(Color.Black, 3)) { p.StartCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; p.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor; g.DrawLine(p, st, e.Location); } Thread.Sleep(30); Invalidate(); //this.Refresh(); g.Dispose(); } 问候

Direct2D / GDI +和慢速Windows表格绘图 – 可以做什么?

我正在使用Visual Studio 2008,.NET C#2.0-3.5和Windows Forms进行大量工作,我注意到,就像我之前的许多人一样,GDI +在绘制控件时非常慢。 请注意 ,我不会非常处理图像(JPG,GIF等)。 图像仅在某些地方作为图标。 这实际上是控件/表格/等,绘制速度很慢。 问题在于您可以看到正在绘制的控件,并且可能需要几秒钟才能绘制一组看似简单的控件。 即,它的滞后和可怕。 我已经进行了测试,我只是在表格上放了一些标签(40-50),按F5运行并且必须等待它们被绘制。 再次,滞后,而不是一个非常好的经验。 那么,WPF可能会解决这个问题,但我/我们还没有准备好转向WPF。 所以我正在寻找解决方法或修复方法,我偶然发现了Direct2D,并在阅读其他一些库时。 让我有点困惑,因此这些问题: 1)首先,我想要的是一个相当简洁的方法,用更快的速度和硬件加速方法替换 GDI +。 是否可以在不转到WPF且无需重写所有Windows窗体代码的情况下执行此操作? 每当我在Direct2D上阅读任何内容时,我都会看到通常可怕的C ++代码的长块,告诉我如何手动编写代码来绘制。 我不要那个。 2)在网上阅读时,我偶然发现了SlimDX,但我无法弄清楚如何使用它(我承认,我写作时并没有尝试过)。 可以说我已经有了一个GUI应用程序(Windows窗体,标准C#代码) – 我可以以某种方式使用SlimDX(或类似的东西)来“替换”GDI +而不需要太多的重写吗? 我的问题是我找不到任何示例或告诉我是否可以在我已经创建的Windows窗体软件中使用SlimDX,Direct2D或其他类似的东西,如果可能的话 – 如何做到这一点。 希望我不要太模糊=) ==编辑== 2010-09-22 我在我的真实应用程序中进行了一些测试,并将其中一个缓慢的事情分离出来: 当我向UserControl中的某些标签添加文本时,控件会自行resize以适合文本。 例如,包含GroupControl的位会适应刚刚添加到标签的.Text属性的文本的大小。 大约有10个Label控件。 第一次更新标签,从而更改尺寸时,整个过程大约需要500毫秒。 标签第二次更新, 没有大小更改,大约需要0毫秒。 ==编辑2 == 2010-09-22 发现其中一个减速。 然后将一个String添加到Text-property,如果正在添加的文本的字符串长度与更新之前的文本不同,则它很慢。 我使用DevExpress库,LabelControls可以设置为AutoSizeMode。 如果我将其设置为“无”,则在添加长度与前一文本不同的文本时,滞后将消失。 我猜这个问题对于普通的Label-control是相同的,因为它也有一个AutoSize = true / false设置。 然而,它是一个“解决方法”,但仍然certificate了我的观点 […]