WPF - HLSL版九宫格

偶遇需要再WPF里面处理九宫格,因不喜截图缩放,即写成了HLSL的Effcect

sampler2D input : register(s0);

/// <summary>The float of the Left.</summary>
/// <minValue>1</minValue>
/// <maxValue>20</maxValue>
/// <defaultValue>20</defaultValue>
float Left : register(C0);

/// <summary>The float of the Top.</summary>
/// <minValue>1</minValue>
/// <maxValue>20</maxValue>
/// <defaultValue>20</defaultValue>
float Top : register(C1);

/// <summary>The float of the Right.</summary>
/// <minValue>1</minValue>
/// <maxValue>20</maxValue>
/// <defaultValue>20</defaultValue>
float Right : register(C2);

/// <summary>The float of the Bottom.</summary>
/// <minValue>1</minValue>
/// <maxValue>20</maxValue>
/// <defaultValue>20</defaultValue>
float Bottom : register(C3);

/// <summary>The float of the Width.</summary>
/// <minValue>5</minValue>
/// <maxValue>200</maxValue>
/// <defaultValue>46</defaultValue>
float Width : register(C4);

/// <summary>The float of the Height.</summary>
/// <minValue>5</minValue>
/// <maxValue>200</maxValue>
/// <defaultValue>46</defaultValue>
float Height : register(C5);

/// <summary>The float of the ShowWidth.</summary>
/// <minValue>50</minValue>
/// <maxValue>1200</maxValue>
/// <defaultValue>750</defaultValue>
float ShowWidth : register(C6);

/// <summary>The float of the ShowHeight.</summary>
/// <minValue>50</minValue>
/// <maxValue>1200</maxValue>
/// <defaultValue>700</defaultValue>
float ShowHeight : register(C7);

float4 main(float2 uv : TEXCOORD) : COLOR
{ 

    float realwidth = uv.x * ShowWidth;
    float realheight = uv.y * ShowHeight;

    //Set color of no scale
    float x = uv.x * ShowWidth / Width;
    float y = uv.y * ShowHeight / Height;

    //Scale X
    if(realwidth >= Left && realwidth <= (ShowWidth - Right))
    {
        x = ((uv.x * ShowWidth - Left) / (ShowWidth - Left - Right) * (Width - Left - Right) + Left) / Width;
    }
    // Real color of max x
    else if(realwidth > (ShowWidth - Right) )
    {
        x = 1 - (1- uv.x) * ShowWidth / Width;
    }

    //Scale Y
    if(realheight >= Top && realheight <= ShowHeight - Bottom )
    {
        y = ((uv.y * ShowHeight - Top) / (ShowHeight - Top - Bottom) * (Height - Top - Bottom) + Top ) / Height;
    }
    //Real color of max y
    else if(realheight > ShowHeight - Bottom )
    {
        y =  1 - (1- uv.y) * ShowHeight / Height;
    }

    return tex2D(input, float2(x ,y)) ;
}

时间: 2024-11-11 00:51:18

WPF - HLSL版九宫格的相关文章

Essential WPF日历排程控件Essential Schedule for WPF

Essential Schedule for WPF是一款具有OutLook外观的WPF平台下的日历日程控件,利用该控件可以进行创建和管理约会和任务安排等.支持拖拉任务活动.调整大小.导入任务安排和导出日程安排等. 具体功能: 支持以天.周.一周工作时间.月为单位查看日程安排 支持时间间隔,使用户可以查看一天中的几个时间段 使用导航条进行时间导航 支持直接添加.编辑.删除日程活动 数据绑定功能允许你绑定到任何IEnumerable集合 控件提供了 Office14Black, Office14B

WPF 基础到企业应用系列1——开篇故意

參考资料 提到參考资料,大家第一感觉就是MSDN,当然我也不例外.这个站点基本上是学习微软技术的首选站点,除了这个站点以外,我还參考了非常多其它的社区和站点,基本上都在.NET 技术社区之我见(英文篇)做了介绍,比方CodeProject.CodePlex .windowsclient.C# Corner等,除了这些站点另一些国外技术专家blog. 1.       Programming Windows Presentation Foundation http://www.amazon.com

Actipro Ribbon For WPF 界面控件免费下载地址

Actipro Ribbon可以添加ribbon用户界面到你的程序中,功能包含:ribbon大小调整.程序菜单.QAT.嵌入的多种控件.多种布局选项.按键提示.屏幕提示.WPF命令模式用法.多种样式.XAML布局.RTL支持.兼容XBAP等. 具体功能: 全部按照微软ribbon用户界面精髓来设计 Ribbon bar 拥有可以分组且可以包含子窗口的Tab 嵌入的控件包含:按钮.可选择按钮.弹出按钮.分割按钮,可选择的分割按钮.单选按钮.文本框.组合框.字体组合框.字体大小组合框.分隔条.标签分

WPF 基础到企业应用系列1——开篇有益

参考资料 提到参考资料,大家第一感觉就是MSDN,当然我也不例外,这个网站基本上是学习微软技术的首选站点,除了这个网站以外,我还参考了很多其他的社区和网站,基本上都在.NET 技术社区之我见(英文篇)做了介绍,比如CodeProject.CodePlex .windowsclient.C# Corner等,除了这些网站还有一些国外技术专家blog. 1.       Programming Windows Presentation Foundation http://www.amazon.com

[Aaronyang] 写给自己的WPF4.5 笔记8[复杂数据处理三步曲,数据视图精讲1/3]

真的好累了 ,笑了.做回自己吧       -------------      Aaronyang技术分享 www.ayjs.net 博文摘要: 详细介绍了WPF中视图的种类和开始学之前的准备工作 视图的 分页视图导航 DEMO1 详细讲解了 视图中xaml的声明方式,以及xaml的排序和分组 DEMO2 实例讲解了DataTable的BindingListCollectionView的类似操作 DEMO3 讲解了LINQ中的过滤 Predicate委托,以及过滤的几种方式 讲解了 视图中后台

Visual Studio 版本转换工具WPF版开源了

想法的由来 入职一家新公司,领导给了个任务,要编写一个视频监控软件,等我编写调试好,领导满意了以后,这个软件要加入到公司的一个软件系统中去(这个添加工作不用我来做,嘻嘻,看着自己的软件被别人使用,心情就是好),而这个系统软件竟然是用VS2008编写的(而我是用VS2013编写的,因为我的电脑是公司新配的),同事新建项目想把代码移植过去,期间竟然各种错误,看着都闹心,于是网上搜索了下,VS2010怎样打开VS2013的工程,网上还真有这样的方法(自己百度一下就知道),于是按照网上方法个性工程后,项

wpf版扫雷游戏

近来觉得wpf做出来的界面很拉风,于是就去自学,发现感觉很不错,可是属性N多,太多了,而且质料也少,很多不会用,只会写基本的操作,样式直接百度黏贴在自己改改,于是属于自己的扫雷就出来了,也只能做这等游戏了,用的知识少,代码也不多,还能帮助自己提高熟练度,最后的感言还是多做才是王道啊,码农就是苦逼啊,wpf属性真是多啊,不过还是得学啊,下面也没什么好说的了,贴代码,扫雷也就一个递归而已 XAML 1 <Window x:Class="SweepMineUI.MainWindow"

【MEF】构建一个WPF版的ERP系统

引言 MEF是微软的一个扩展性框架,遵循某种约定将各个部件组合起来.而ERP系统的一大特点是模块化,它们两者的相性很好,用MEF构建一个ERP系统是相当合适的.下面简单演示如何构建一个简单版的ERP系统. 简单分析 从框架的角度来看,一个好的ERP系统应该至少具备以下两个特点: 1.模块开发.一个大型ERP系统要靠团队开发的,每个人负责的模块可能都不一样,要保证低耦合和开发进度,每个模块必须要能够独立开发测试,最终才组合起来. 2.实时更新.ERP系统的模块经常会有功能性修改,升级频繁,要保证良

Font Awesome矢量版,十六进制版,WPF字体使用

我之前在博客中介绍过几个矢量图库网站,在WPF程序中,一般接触到的矢量图标资源有XAML.SVG.字体这三种格式.XAML是标准格式就不说了,SVG并不是直接支持的,不过微软提供了Expression Design可以非常方便我们将其转换为XAML格式的资源.而对于字体,虽然WPF是直接支持的,但由于字体图标其特殊性,要将其显示为图标还是需要费点劲的.本文这里就以Font-Awesome为例,介绍一下如何在WPF中使用字体图标. Every Font Awesome 4.7.0 Icon, CS