Direct2D怎么实现ps橡皮擦怎么用功能??

主题 : 比较完美的画图板橡皮擦功能
亲爱的会员,CocoaChina服务团队真诚希望得到您的反馈:
功能建议报告错误其他Direct2D 是微软新的二维图形 API,可为二维几何图形、位图和文本提供高性能和高质量的呈现。Direct2D 支持硬件加速,无论是绘制速度还是绘制质量,Direct2D 都要比 GDI 和 GDI+ 好很多,不过系统要求 Windows 7 或 Windows Vista SP2 以上。
关于 Direct2D 的一些介绍可以参见微软的帮助《》。
Direct2D 内置了很多特效(Effects),包括高斯模糊(Gaussian Blur)、颜色转换(Color Matrix)、阴影(Shadow)等,所有特效的列表可以在看到。利用这些特效可以做出很多效果,组合起来的话,完全可以实现 PhotoShop 中滤镜的功能。
本篇文章就介绍了如何通过组合多种特效,来实现斜角(Bevel)效果。具体的实现使用的是
类库,因为它支持 Direct2D 的内置特效,而微软自己的 WindowsAPICodePackage 至少在 1.1 版还没有支持。SharpDX 使用的是目前最新的开发版 2.5.0,它自带了支持 DirectX 11 和 DirectX 11.1 的两组 DLL,其中前一组 DLL 不支持 Effects,因此要使用支持 DirectX 11.1 的 DLL 才可以。
斜角特效的主要原理来自于 ,这是一篇官方帮助文档,它自带的示例是 C++ 的,而且系统要求是 Windows 8.1 Preview + Microsoft Visual Studio 2013 Preview,因此我将其中核心的部分提取出来,自己编写了一个示例,实现的效果如图 1 所示。
图 1 源位图及其斜角效果对比
斜角效果的实现过程如图 2 所示,利用四个特效进行组合,就可以实现一个比较不错的斜角特效。
图 2 效果实现流程及效果
首先将要应用斜角的图像绘制(或者从外界加载)到一个 SharpDX.Direct2D1.Bitmap1 对象中。示例中的图形是利用 Direct2D 的相关方法绘制的,实际使用中也可以从外界加载。需要注意的是背景必须是透明的,不透明的部分就会产生斜角,否则只会在图片的边缘产生斜角。这个位图被称为&源位图&。
然后为源位图添加一个 SharpDX.Direct2D1.Effects.GaussianBlur 特效,高斯模糊的半径(StandardDeviation 属性)就决定了斜角的尺寸。如图 3 所示,上图的半径是 8,下图的半径是 12,可以明显看到下图的斜角尺寸更大。这里使用高斯模糊特效主要是为了令源图像产生透明度(Alpha)的渐变,以便于下一步进行处理。这里还可以选用 SharpDX.Direct2D1.Effects.Shadow 阴影特效,它同样可以产生透明度的渐变。
图 3 不同高斯模糊半径的对比
接下来,为 GaussianBlur 特效的结果应用 SharpDX.Direct2D1.Effects.PointSpecular 特效,这个特效是斜角效果的关键,这个特效实际上是将源图像当作一个反射面,用源图像的 Alpha 通道表示反射面的高度,然后用一个点光源照射到源图像上,得到的反射结果就是特效的处理结果。这样,上一步高斯模糊得到的 Alpha 渐变,就相当于令源图像产生了一个&凸起&。
PointSpecular 特效有很多参数,包括光源位置、颜色、聚焦、表面缩放比例等等,不同的参数就会产生不同的&斜角&效果。LightPosition 属性是光源的位置,它可以改变斜角的方向,如图 4 所示,上图的光源在上方,下图的光源更加偏右,得到的效果也不同。
图 4 不同光源位置的对比
SurfaceScale 属性是表面的缩放比例,它可以改变斜角的高度,如图 5 所示。
图 5 不同斜角高度的对比
PointSpecular 特效的其它参数也可以对最终的斜角效果产生影响,这就需要自己去测试了。对 PointSpecular 特效的详细解释可进一步参见 。
然后,用 SharpDX.posite 特效将源位图和 PointSpecular 特效的结果组合起来。Composite 特效的组合原则很简单,就是根据 Mode 属性的不同,选择输出不同输入的像素。关于该特效具体的组合原则,可以参见 。
从图 2 中可以看到,PointSpecular 特效的结果要比源位图更大,而且其中存在一些不需要部分。这里应用一个 Composite 特效,并将 Mode 属性设置为 CompositeMode.SourceIn,这样它的组合原则是 O = DA * S,即输出的像素 = Destination 的 Alpha 值 * Source。其中 Destination 是第一个输入(索引 0,即源位图),Source 是第二个输入(索引 1,即 PointSpecular 特效的结果)。这样就可以将 PointSpecular 特效的结果中不需要的部分剔除掉了。
最后一步,利用 SharpDX.Direct2D1.Effects.ArithmeticComposite 特效将源位图和 Composite 特效的结果组合起来。ArithmeticComposite 特效是&算术组合&特效,它采用公式 $Output_{rgba} = C_1 * Source_{rgba} * Destination_{rgba} + C_2 * Source_{rgba} + C_3 * Destination_{rgba} + C_4$ 来将两个输入位图的像素组合起来,更多信息可以参考 。
这里组合公式的四个值(由 Coefficients 属性设置) $C_1,C_2,C_3$ 和 $C_4$ 会决定最终的输出效果。这四个值的取值与之前 PointSpecular 特效的属性是非常相关的,在这个例子中,一直采用的一组值是 Vector4(0.0f, 1.0f, 1.0f, 0.0f),如果将这组值改成 Vector4(1.0f, 0.5f, 0.0f, 0.0f),则会如图 6 所示,下边的新值产生的斜角效果明显偏暗。
图 6 不同 Coefficients 属性的对比
如果更换一组 PointSpecular 特效的属性,即除了 SurfaceScale 仍然设置为 5f 以外,其他属性全部取默认值,上面两组 Coefficients 属性得到的结果如图 7 所示,反而是旧值偏亮,新值颜色比较正,但斜角效果不是很明显。
图 7 新的光照条件下不同 Coefficients 属性的对比
总的来说,斜角效果的实现步骤是基本固定的,就是上面的五个步骤。斜角的尺寸、高度和方向也可以很容易确定,尺寸对应于 GaussianBlur 特效的 StandardDeviation 属性,高度对应于 PointSpecular 特效的 SurfaceScale 属性,方向对应于 PointSpecular 特效的 LightPosition 属性。但是斜角特效的颜色则会比较复杂,会由 PointSpecular 特效的 SpecularExponent 属性、SpecularConstant 属性和 ArithmeticComposite 特效的 Coefficients 属性共同决定,而且 LightPosition 属性也会一定程度上影响斜角特效的颜色,这个就需要经验和试验了。
所有源代码和用到的类库都可以在下载。
阅读(...) 评论()正在学习Flex,现在想做一个基于flex 的画图程序,程序基本的功能都已经实现,只是橡皮擦还没有实现的想法。我原来的想法是橡皮擦功能应该是用背景颜色画一条线,遮住原来的内容就可以了,但是做好后才发现这样实现是不好的,因为如果背景颜色改变了的话,原来橡皮擦画出的反而是一大片原来背景颜色的颜色块,根本就不是橡皮擦功能了,真正的橡皮擦的实现原理应该是怎么样的呢?
另外,在做这个程序的时候,原来的想法是在画笔画出画板边界时停止作画,使用了MouseEvent.ROLL_OUT事件来监听画笔是否出了画板,但是实际实现时发现这个事件只有在画笔移出了画板和画板所有的子对象时才触发,也就是说如果画笔画图的速度够慢,画笔是一直在刚画出的那条线上的,无法触发MouseEvent.ROLL_OUT事件,也就不能停止作画,这种情况应该怎么解决呢?
如何绘制橡皮筋效果?
看下我的学习笔记,希望是你想要的:
/admin/blogs/757868
已解决问题
未解决问题ps如何实现橡皮擦功能_百度知道
ps如何实现橡皮擦功能
提问者采纳
选择橡皮擦工具,在图层上对准需要擦掉的物件操作就行
其他类似问题
2人觉得有用
橡皮擦的相关知识
其他3条回答
英文输入法时按“E”建,选择需要擦掉的图层,鼠标在需要擦掉的部分擦拭即可如果只是背景图层,需要解锁注:擦掉的部分为透明哦,无背景的图片保存后为白色
pdf编辑器Foxit PDF Editor 是第一个真正的PDF文件编辑软件。许多人都希望能找到一个象编辑其它类型的文档的编辑器,事实上在 Foxit PDF Editor 出现之前,根本没有这样的工具。每一个PDF 文件都包含很多页面,每一页包含各种可视对象,如文本对象、图形对象和图像对象。而每一个对象都由其属性来定义其显示的方式。Foxit PDF Editor 的功能包括:-编辑现有 PDF 文件或创建全新的PDF文件。-以和 Adobe PDF Reader 几乎相同的效果显示 PDF 文件。-页面缩放。-可靠的所见即所得的编辑功能。-插入或删除页面。-使用嵌入或非嵌入字体添加文本对象。-插入行或其它简单的图形对象。-插入 bitmap 格式的图像。-从页面中删除任意对象。-改变对象的属性。-可撤消任意操作。-在不同 PDF 文件间拷贝粘贴任意对象。-在 PDF 和任意 Windows 应用程序间拷贝粘贴文本。-在 PDF 和任意 Windows 应用程序间拷贝粘贴图像。汉化说明:1、此为汉化注册版,非破解,安装后即可使用。2、此软件支持中文字体,方法如下:从主菜单“编辑”中选择“导入字体”,然后选择你想要的中文字体,确定后就可以支持中文输入了。3、该版本加入了中日韩语言的显示支持文件 fpdfcjk.bin。4、因此版与以前的版本相比变动较大,好多ASCII 汉化增加了难度,在后期的ASCII 排错上花了很长时间,因为涉及到程序的正常功能,有部分单词不能汉化。目前还不知道会不会有因汉化而出现的 BUG,如发现问题,请及时通知我。5、此汉化无捆绑。
等待您来回答
您可能关注的推广
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 ps橡皮擦怎么用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信