在Photoshop中,您可以选择“颜色”(从底部开始的第二个)将混合模式设置为下一个较低层:

如果图像顶部只有一个渐变,结果可能如下所示:

我在某处找到的颜色混合模式的描述是:

颜色将下层的色调和饱和度改变为上层的色调和饱和度,但仅留下亮度.

到目前为止我的代码是:

using(var g = Graphics.FromImage(canvas))
{
    // draw the lower image
    g.DrawImage(lowerImg,left,top);

    // creating a gradient and draw on top
    using (Brush brush = new LinearGradientBrush(new Rectangle(0,canvasWidth,canvasHeight),Color.Violet,Color.Red,20))
    {
        g.FillRectangle(brush,canvasHeight);
    }
}

但那是 – 当然 – 只是在较低的图像上绘画.

所以问题是:

如何使用Photoshop中提供的混合模式“颜色”在另一个图像上绘制图像?

编辑:

为了使我更清楚我想要实现的目标:

如果有人想使用图像进行测试:

解决方法

这是我的解决方案.我使用Rich Newman的 HSLColor类来转换RGB和HSL值.
using (Bitmap lower = new Bitmap("lower.png"))
using (Bitmap upper = new Bitmap("upper.png"))
using (Bitmap output = new Bitmap(lower.Width,lower.Height))
{
    int width = lower.Width;
    int height = lower.Height;
    var rect = new Rectangle(0,width,height);

    BitmapData lowerData = lower.LockBits(rect,ImageLockMode.ReadOnly,PixelFormat.Format24bppRgb);
    BitmapData upperData = upper.LockBits(rect,PixelFormat.Format24bppRgb);
    BitmapData outputData = output.LockBits(rect,ImageLockMode.writeonly,PixelFormat.Format24bppRgb);

    unsafe
    {
        byte* lowerPointer = (byte*) lowerData.Scan0;
        byte* upperPointer = (byte*) upperData.Scan0;
        byte* outputPointer = (byte*) outputData.Scan0;

        for (int i = 0; i < height; i++)
        {
            for (int j = 0; j < width; j++)
            {
                HSLColor lowerColor = new HSLColor(lowerPointer[2],lowerPointer[1],lowerPointer[0]);
                HSLColor upperColor = new HSLColor(upperPointer[2],upperPointer[1],upperPointer[0]);
                upperColor.Luminosity = lowerColor.Luminosity;
                Color outputColor = (Color) upperColor;

                outputPointer[0] = outputColor.B;
                outputPointer[1] = outputColor.G;
                outputPointer[2] = outputColor.R;

                // Moving the pointers by 3 bytes per pixel
                lowerPointer += 3;
                upperPointer += 3;
                outputPointer += 3;
            }

            // Moving the pointers to the next pixel row
            lowerPointer += lowerData.Stride - (width * 3);
            upperPointer += upperData.Stride - (width * 3);
            outputPointer += outputData.Stride - (width * 3);
        }
    }

    lower.UnlockBits(lowerData);
    upper.UnlockBits(upperData);
    output.UnlockBits(outputData);

    // Drawing the output image
}

c# – 使用混合模式颜色在另一个图像上绘制图像的更多相关文章

  1. .net – 给定选择,混合模式程序集与单独的互操作DLL的优缺点是什么?

    当“混合模式组合”和“单独的互操作”版本提供第三方组件时,每个组件的优点和缺点是什么?混合模式组合似乎在我的项目中工作正常,没有GAC安装.很少有一个更少的DLL.感觉更整洁那么有什么缺点呢?

  2. ios – 使用Multiply混合模式覆盖UIImageViews?

    我有2个UIImageViews显示在彼此之上.其中一个可以使用手势识别器拖动.有没有一种方法可以使用像Multiply这样的混合模式渲染ImageViews?

  3. c# – 使用混合模式颜色在另一个图像上绘制图像

    在Photoshop中,您可以选择“颜色”将混合模式设置为下一个较低层:如果图像顶部只有一个渐变,结果可能如下所示:我在某处找到的颜色混合模式的描述是:颜色将下层的色调和饱和度改变为上层的色调和饱和度,但仅留下亮度.到目前为止我的代码是:但那是–当然–只是在较低的图像上绘画.所以问题是:如何使用Photoshop中提供的混合模式“颜色”在另一个图像上绘制图像?

  4. 混合模式程序集(C/C++LI项目)是否可以在.NET Core上运行?

    我有一个使用C/C++LI项目的代码库,它通过瘦包装类将C类暴露给CLR.例如…C项目中的C代码混合模式程序集中的C/C++LI代码据我所知,混合模式程序集几乎只能在Windows.NET上运行.我希望我不需要重新考虑组件并使用P/Invoke,这将为我提供跨平台支持.有谁知道.NETCore是否支持混合模式程序集?

  5. 如何在Cocos2D 1.0 中掩饰一个精灵(三)

    hopy;)尝试编译运行,在你每一次点击屏幕的时候,你将看到我可爱的妻子制作的随机日历图片:现在我们的app里已经有了像样的框架了,让我们开始实现掩饰效果吧!

  6. cocos2dx  混合模式

    如果学习过OpenGL,就知道里面使用glBlendFunc函数实现的。在cocos2d-x里肯定也有,对于精灵,可以使用mySprite->setBlendFunc()来现。下面举一个例子:[cpp]viewplaincopy//////////////////////////////backgroundCCSprite*helloSprite=CCSprite::create;helloSprite->setPosition;this->addChild;///////////////////////

  7. 制作新手引导高亮区域方法之一:混合模式

    demo下载:Quick-x-HighlightArea-master.zip1、混合模式(1)首先创建一个全屏的CCRenderTexture实例这里使用的黑色0.6的透明度,看起来的效果就是一层黑色半透明的遮罩叠在游戏界面上面:1234localpRt=CCRenderTexture:create(size.width,size.height)localcolor=ccc3(0,0)--黑色l

  8. cocos2d粒子系统--粒子编辑器Parti…

    CCParticleSystemQuad方形粒子系统,在3代以后的机器上运行的比较快,他会消耗更多的内存和cpu。使用预处理器ARCH_OPTIMAL_PARTICLE_SYstem来定义粒子系统,在代码编译过程中来判断使用哪一个粒子系统。会自动的根据机型选择合适的粒子系统例:@interfaceCCParticleExplosion:ARCH_OPTIMAL_PARTICLE_SYstem2、有关粒子贴图粒子贴图必须小于64x64的,越小越好。好了,下一步我们就来学习下粒子工具ParticleDesig

  9. APP三种开发模式--及---HybridApp解决方案_No1_混合模式(Hybrid)App开发概述

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  10. html5 – Chrome中的Chrome css3混合混合模式错误

    我有两个重叠的叠加层,叠加的部分使用混合混合模式混合.在chrome中应用了效果但是使用此属性的div有奇怪的闪烁.这是闪烁的原因以及如何解决.我已经在firefox上测试了它的良好运行但不是在chrome中.Screenshot上面的图像是一旦动画结束,一旦完成,左边的div开始连续闪烁.解决方法我有这个问题,发现它似乎是由混浊与混合混合模式的组合引起的.解决方案是添加一个将改变的规则:不透明度

随机推荐

  1. c# – (wpf)Application.Current.Resources vs FindResource

    所以,我正在使用C#中的WPF创建一个GUI.它看起来像这样:它现在还没有完成.这两行是我尝试制作一种数据表,它们在XAML中是硬编码的.现在,我正在C#中实现添加新的水果按钮功能.我在XAML中有以下样式来控制行的背景图像应该是什么样子:因此,在代码中,我为每列col0,col1和col2创建一个图像,如果我使用以下代码,它添加了一个如下所示的新行:如你所见,它不太正确……为什么一个似乎忽略了一些属性而另一个没有?

  2. c# – 绑定DataGridTemplateColumn

    似乎我已经打了个墙,试图在DataGrid上使用DataTemplates.我想要做的是使用一个模板来显示每个单元格的两行文本.但是似乎无法以任何方式绑定列.以下代码希望显示我想做的事情.注意每个列的绑定:模板列没有这样的东西,因此,这个xaml不可能工作.我注定要将整个DataTemplate复制到每个列,只是对每个副本都有不同的约束?解决方法我不完全确定你想要做什么,但如果您需要获取整行的DataContext,可以使用RelativeSource绑定来移动视觉树.像这样:

  3. c# – 学习设计模式的资源

    最近我来到了这个设计模式的概念,并对此感到非常热情.你能建议一些帮助我深入设计模式的资源吗?

  4. c# – 是否有支持嵌入HTML页面的跨操作系统GUI框架?

    我想开发一个桌面应用程序来使用跨系统,是否有一个GUI框架,允许我为所有3个平台编写一次代码,并具有完全可脚本化的嵌入式Web组件?我需要它有一个API来在应用程序和网页之间进行交流.我知道C#,JavaScript和一些python.解决方法Qt有这样的事情QWebView.

  5. c# – 通过字符串在对象图中查找属性

    我试图使用任意字符串访问嵌套类结构的各个部分.给出以下(设计的)类:我想要从Person对象的一个实例的“PersonsAddress.HousePhone.Number”获取对象.目前我正在使用反思来做一些简单的递归查找,但是我希望有一些忍者有更好的想法.作为参考,这里是我开发的(crappy)方法:解决方法您可以简单地使用标准的.NETDataBinder.EvalMethod,像这样:

  6. c# – 文件下载后更新页面

    FamilyID=0a391abd-25c1-4fc0-919f-b21f31ab88b7&displaylang=en&pf=true它呈现该页面,然后使用以下元刷新标签来实际向用户提供要下载的文件:你可能需要在你的应用程序中做类似的事情.但是,如果您真的有兴趣在文件完全下载后执行某些操作,那么您的运气不佳,因为没有任何事件可以与浏览器进行通信.执行此操作的唯一方法是上传附件时使用的AJAXupload.

  7. c# – 如何在每个机器应用程序中实现单个实例?

    我必须限制我的.net4WPF应用程序,以便每台机器只能运行一次.请注意,我说每个机器,而不是每个会话.我使用一个简单的互斥体实现单实例应用程序,直到现在,但不幸的是,这样一个互斥是每个会话.有没有办法创建机器互连,还是有其他解决方案来实现每个机器应用程序的单个实例?

  8. c# – WCF和多个主机头

    我的雇主网站有多个主机名,都是同一个服务器,我们只是显示不同的皮肤来进行品牌宣传.不幸的是,在这种情况下,WCF似乎不能很好地工作.我试过overridingthedefaulthostwithacustomhostfactory.这不是一个可以接受的解决方案,因为它需要从所有主机工作,而不仅仅是1.我也看过thisblogpost,但是我无法让它工作,或者不是为了解决我的问题.我得到的错误是“这

  9. c# – ASP.NET MVC模型绑定与表单元素名称中的虚线

    我一直在搜索互联网,试图找到一种方式来容纳我的表单元素的破折号到ASP.NET的控制器在MVC2,3或甚至4中的默认模型绑定行为.作为一名前端开发人员,我更喜欢在我的CSS中使用camelCase或下划线进行破折号.在我的标记中,我想要做的是这样的:在控制器中,我会传入一个C#对象,看起来像这样:有没有办法通过一些正则表达式或其他行为来扩展Controller类来适应这种情况?我讨厌这样的事实,我必须这样做:甚至这个:思考?

  10. c# – 用户界面设计工具

    我正在寻找一个用户界面设计工具来显示文档中可能的GUI.我不能生成代码.我知道MicrosoftVisio提供了一个功能.但有什么办法吗?您使用哪种软件可视化GUI?

返回
顶部