【问题标题】:How to write text on image with overlay effect in c#如何在 C# 中使用叠加效果在图像上写入文本
【发布时间】:2012-10-08 01:43:55
【问题描述】:

我想在具有叠加混合效果的图像上写入文本。不是简单的透明度,而是将图像的像素与文字的颜色混合在一起。

我有一个在图像上写入文本的函数,但它只使用了一个简单的透明度。

grPhoto.DrawString(strText,        //string of text
    crFont,                            //font
    semiTransBrush,                    //Brush
    new PointF(xCenterOfImg,yPosFromBottom),  //Position
    StrFormat);                               //Text alignment

【问题讨论】:

  • 你在寻找什么效果?透明度还匹配“将图像的像素与文本颜色混合”。
  • 我想要类似 Photoshop 叠加混合模式的效果。基色不会被替换,而是与混合色混合以反映原始颜色的明暗。
  • 你能不能用一些图像来显示叠加效果。
  • 叠加结合了乘法和屏幕混合模式。图片的亮部变得更亮,暗部变得更暗。具有相同图片的叠加看起来像 S 曲线。公式:结果颜色 = if (Bottom Color

标签: c# image text graphics overlay


【解决方案1】:

这是formula that Photoshop 在使用叠加混合时用来计算像素值的。您可能必须在混合过程中自己计算每个像素 - 我不相信 GDI+ 对混合有如此特定的支持。 (我可能错了,我已经有一段时间没有使用 GDI+了。)

Paint.NET 在其叠加混合实现中使用了类似的算法 - Reflector 可能会给您一些想法。

【讨论】:

  • 好的,但是我怎样才能以更简单的方式用我的文本来制作呢? paint.net 使用复杂的图层和过滤器,这对于我的需要来说太复杂了。
  • @MarioM 你也必须这样做。首先将文本渲染到透明位图上,然后将此位图混合到原始位图上。在此混合过程中,您的代码将必须遍历顶层(文本位图)的所有像素,并通过将公式应用于文本位图和原始位图中的像素来计算最终像素。无论给定像素的结果是什么,都是您在该位置的输出像素。这篇文章可能有用:codeproject.com/Tips/240428/Work-with-bitmap-faster-with-Csharp
  • @MarioM 如果您想要那种特殊的混合效果,我认为没有更简单的方法。您可以调整文本颜色,让简单的透明度适合您。
  • 我坚信我可以制作一个画笔来创造这种效果。 :(
  • 简单透明的问题是,当我在灰色图像上写文字时,文字几乎看不见,而在黑色图像上,文字很亮。
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 2016-09-06
  • 2020-12-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
相关资源
最近更新 更多