源碼下載:http://yunpan.cn/c3iNuHFFAcr8h  访问密码 8e48

還是先來看下截圖:

實現了幾個效果:放大、縮小、旋轉、左右翻轉、上下翻轉,亮度變化、灰度圖、對比度、高斯模糊。

放大、縮小代碼:

private void scale(float x)
{
scale_ *= x;
using (var ds = board_.CreateDrawingSession())
{
ds.Transform = Matrix3x2.CreateScale(scale_);
ds.Clear(Colors.Black);
ds.DrawImage(oriImage_);
} transform.Invalidate();
} private void zoomIn_Click(object sender, RoutedEventArgs e)
{
scale(1.1f);
} private void zoomOut_Click(object sender, RoutedEventArgs e)
{
scale( / 1.1f);
}

旋轉代碼(注意,默認轉動方向是鐘錶方向——順時針):

private void rotate_Click(object sender, RoutedEventArgs e)
{
rotate_radians_ += ;
using (var ds = board_.CreateDrawingSession())
{
ds.Transform = Matrix3x2.CreateRotation(rotate_radians_ * (float)Math.PI / , new Vector2((float)oriImageRc_.Width / 2.0f, (float)oriImageRc_.Height / 2.0f));
ds.Clear(Colors.Black);
ds.DrawImage(oriImage_);
} transform.Invalidate();
}

左右、上下翻轉代碼:

private void left_right_Click(object sender, RoutedEventArgs e)
{
left_right_direction_ = -left_right_direction_; using (var ds = board_.CreateDrawingSession())
{
ds.Transform = Matrix3x2.CreateScale(new Vector2(left_right_direction_, top_bottom_direction_), new Vector2((float)oriImageRc_.Width / 2.0f, (float)oriImageRc_.Height / 2.0f));
ds.Clear(Colors.Black);
ds.DrawImage(oriImage_);
} transform.Invalidate();
} private void top_bottom_Click(object sender, RoutedEventArgs e)
{
top_bottom_direction_ = -top_bottom_direction_; using (var ds = board_.CreateDrawingSession())
{
ds.Transform = Matrix3x2.CreateScale(new Vector2(left_right_direction_, top_bottom_direction_), new Vector2((float)oriImageRc_.Width / 2.0f, (float)oriImageRc_.Height / 2.0f));
ds.Clear(Colors.Black);
ds.DrawImage(oriImage_);
} transform.Invalidate();
}

亮度、灰度、對比度、高斯,均使用Effect效果,其效果放在名字空間:

Microsoft.Graphics.Canvas.Effects

具體代碼:

亮度,注意,我使用了WhitePoint,還有BlackPoint,請讀者自己試驗效果。而且亮度的範圍為:[0-1),注意閉包關係。

private void lightSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (board_ == null) return; using (var ds = board_.CreateDrawingSession())
{
Microsoft.Graphics.Canvas.Effects.BrightnessEffect brightness = new Microsoft.Graphics.Canvas.Effects.BrightnessEffect();
if (e.NewValue >= 0.000001)
{
brightness.WhitePoint = new Vector2(, (float)e.NewValue);
}
else
{
brightness.WhitePoint = new Vector2(-(float)e.NewValue, );
} brightness.Source = oriImage_; ds.Clear(Colors.Black);
ds.DrawImage(brightness);
} transform.Invalidate();
}

灰度:

        private void gray_Click(object sender, RoutedEventArgs e)
{
Microsoft.Graphics.Canvas.Effects.GrayscaleEffect grayEffect = new Microsoft.Graphics.Canvas.Effects.GrayscaleEffect();
grayEffect.Source = oriImage_; using (var ds = board_.CreateDrawingSession())
{
ds.Clear(Colors.Black);
ds.DrawImage(grayEffect);
}
transform.Invalidate();
}

對比度:

        private void constrastSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (board_ == null) return; Microsoft.Graphics.Canvas.Effects.ContrastEffect constrastEffect = new Microsoft.Graphics.Canvas.Effects.ContrastEffect();
constrastEffect.Contrast = (float)e.NewValue;
constrastEffect.Source = oriImage_; using (var ds = board_.CreateDrawingSession())
{
ds.Clear(Colors.Black);
ds.DrawImage(constrastEffect);
}
transform.Invalidate();
}

高斯:

private void gaussianSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)
{
if (board_ == null) return; Microsoft.Graphics.Canvas.Effects.GaussianBlurEffect gaussianEffect = new Microsoft.Graphics.Canvas.Effects.GaussianBlurEffect();
gaussianEffect.BlurAmount = (float)e.NewValue;
gaussianEffect.Source = oriImage_; using (var ds = board_.CreateDrawingSession())
{
ds.Clear(Colors.Black);
ds.DrawImage(gaussianEffect);
}
transform.Invalidate();
}

【WIN10】WIN2D——圖像處理的更多相关文章

  1. 在 Windows 上遇到非常多 TIME_WAIT 連線時應如何處理

        我們公司所代管的網站裡,有幾個流量是非常大的,在尖峰的時刻同時上線人數可能高達數千到數萬人,而在這個時候如果使用 netstat 或 TCPView 查看所有 TCP 連線時就會看到非常多處於 ...

  2. PTA題目的處理(一)

    **題目1:A乘B** **實驗代碼** #include <stdio.h> #include <stdlib.h> int main() { signed int a,b; ...

  3. T-SQL 簡易小數處理

    今天因應同事提的一則需求,寫了一段 CASE WHEN 的整數與小數處理 過程中居然踩了個雷,特此記錄下來 首先,需求如下: 當內容為整數或零時則去掉尾端的小數否則就顯示原本的小數內容 若內容為 NU ...

  4. linux缺頁異常處理--內核空間[v3.10]

    缺頁異常被觸發通常有兩種情況—— 1.程序設計的不當導致訪問了非法的地址 2.訪問的地址是合法的,但是該地址還未分配物理頁框 下面解釋一下第二種情況,這是虛擬內存管理的一個特性.盡管每個進程獨立擁有3 ...

  5. iOS/Android/Web Url Encode空格處理 原文連結:http://read01.com/3gDO.html

    iOS/Android/Web Url Encode空格處理 原文連結:http://read01.com/3gDO.html 前言 這裡只是講一個故事,一個發生在我身上的真實的故事.曾經,我以為搞加 ...

  6. 整理幾種常見PCB表面處理的優缺點

    這只是一篇整理文,而且我個人僅從事過後段的電路板組裝,而未從事過電路板製程,所以有些見解純粹只是個人看法,如果有些不一樣的聲音或錯誤也歡迎留言討論. 隨著時代的演進,科技的進步,環保的要求,電子業也隨 ...

  7. C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem

    原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLT ...

  8. PTA题目的處理(四)

    题目7-3 求交错序列前N项和 1.实验代码 #include <stdio.h> //#include <stdlib.h> int main() { ,N; double ...

  9. SpringBoot使用maven插件打包時報:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException的處理方案

    SpringBoot使用maven插件打包時報:[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExec ...

随机推荐

  1. js监听浏览器tab窗口切换

    js监听浏览器tab窗口切换 ——IT唐伯虎 摘要:js监听浏览器tab窗口切换. if (document.hidden !== undefined) {  document.addEventLis ...

  2. Signal ()函数详细介绍

    1. 功能 设置某一信号的对应动作 2. 声明 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t si ...

  3. Java迭代器用法

    public class Test01 { public static void main(String[] args) { List list = new ArrayList(); list.add ...

  4. Ubuntu 16.04开机自启Nginx简单脚本

    本文要记述的是最简单的Ubuntu下开机自启 nginx的脚本 这里将nginx装在了/usr/local/nginx目录下,nginx本身没有注册成服务,所以直接使用服务开机自启是不行的,除非自己写 ...

  5. Sublime Text 3 绿色汉化版 x64

    之前做了<Sublime Text 2 绿色汉化版 x64>,这些天抽空做了下 ST3 的汉化.. 果然我没有任何理由爱上 ST3,不仅pojie麻烦,而且汉化更麻烦,菜单字符长度做了限制 ...

  6. [机器学习&数据挖掘]SVM---软间隔最大化

    根据上个硬间隔最大化已经知道,在解决线性可分数据集的分类问题时,求得拉格朗日乘子.w.b就得到分离超平面,然后就可以进行分类,软间隔最大化是针对非线性可分的数据集,因为并不是数据集在可分的时候会出现一 ...

  7. JS中字符串那些事~

    1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 var sStr = ‘字符串’;(常用) var oStr = new String ...

  8. 解决Tomcat6解压版在64位windows系统上无法启动服务的问题

    解决Tomcat6解压版在64位windows系统上无法启动服务的问题         由于客户环境为64位windows系统,开发环境一直用32位.tomcat使用6.0.20非安装版.部署时发现在 ...

  9. 关于Python IDLE reload(sys)后无法正常执行命令的原因

    转载自:http://blog.csdn.net/kxcfzyk/article/details/41414247?utm_source=tuicool&utm_medium=referral ...

  10. Java基本数据类型装箱的127临界点

    package wrapper.demo; public class WrapperDemo { /** * @param args */ public static void main(String ...