【WIN10】WIN2D——圖像處理
源碼下載: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——圖像處理的更多相关文章
- 在 Windows 上遇到非常多 TIME_WAIT 連線時應如何處理
我們公司所代管的網站裡,有幾個流量是非常大的,在尖峰的時刻同時上線人數可能高達數千到數萬人,而在這個時候如果使用 netstat 或 TCPView 查看所有 TCP 連線時就會看到非常多處於 ...
- PTA題目的處理(一)
**題目1:A乘B** **實驗代碼** #include <stdio.h> #include <stdlib.h> int main() { signed int a,b; ...
- T-SQL 簡易小數處理
今天因應同事提的一則需求,寫了一段 CASE WHEN 的整數與小數處理 過程中居然踩了個雷,特此記錄下來 首先,需求如下: 當內容為整數或零時則去掉尾端的小數否則就顯示原本的小數內容 若內容為 NU ...
- linux缺頁異常處理--內核空間[v3.10]
缺頁異常被觸發通常有兩種情況—— 1.程序設計的不當導致訪問了非法的地址 2.訪問的地址是合法的,但是該地址還未分配物理頁框 下面解釋一下第二種情況,這是虛擬內存管理的一個特性.盡管每個進程獨立擁有3 ...
- iOS/Android/Web Url Encode空格處理 原文連結:http://read01.com/3gDO.html
iOS/Android/Web Url Encode空格處理 原文連結:http://read01.com/3gDO.html 前言 這裡只是講一個故事,一個發生在我身上的真實的故事.曾經,我以為搞加 ...
- 整理幾種常見PCB表面處理的優缺點
這只是一篇整理文,而且我個人僅從事過後段的電路板組裝,而未從事過電路板製程,所以有些見解純粹只是個人看法,如果有些不一樣的聲音或錯誤也歡迎留言討論. 隨著時代的演進,科技的進步,環保的要求,電子業也隨 ...
- C++ 檔案、資料夾、路徑處理函式庫:boost::filesystem
原帖:https://tokyo.zxproxy.com/browse.php?u=uG7kXsFlW1ZmaxKEvCzu8HrCJ0bXIAddA1s5dtIUZ%2FYzM1u9JI7jjKLT ...
- PTA题目的處理(四)
题目7-3 求交错序列前N项和 1.实验代码 #include <stdio.h> //#include <stdlib.h> int main() { ,N; double ...
- 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 ...
随机推荐
- 解决 django 博客归档 “Are time zone definitions for your database and pytz installed?”的错误
修改 project 中的settings 文件,问题解决! # USE_TZ = True USE_TZ = False # LANGUAGE_CODE = 'en-us' LANGUAGE_COD ...
- 快速了解yuv4:4:4 yuv4:2:2 yuv 4:1:1 yuv 4:2:0四种YUV格式区别
四种YUV格式区别如下: 1.YUV 4:4:4抽样方式: Y: Y0 Y1 Y2 Y3 U: U0 U1 U2 U3 V: V0 V1 V2 V3 2.YUV 4:2:2抽样方式: Y : ...
- git 查看一个分支是否被合并过
1.查看该分支的提交历史 git log 分支名 2.git log master |grep comitid 如果包含,就证明已经合并过 3.git branch -d 分支名,如果报错,就是没合并 ...
- javascript构造函数模块
var Person = (function(){ var Constr; Constr = function(){ this.name = 'carl'; } Constr.prototype = ...
- [python]python三元表达式另类实现方式
() variable = a if exper else b ()variable = (exper and [b] or [c])[] () variable = exper and b or c
- Linux - 用户操作
常用命令 users # 显示所有的登录用户 groups # 列出当前用户和他所属的组 who -q # 显示所有的登录用户 groupadd # 添加组 useradd user # 建立用户 p ...
- Codeforces 238 div2 A. Gravity Flip
题目链接:http://codeforces.com/contest/405/problem/A 解题报告:有n列箱子竖直放置,每列箱子上都有数量不等的箱子,这些箱子之间没有固定,当重力方向改为平行向 ...
- HDU 1501 Zipper 字符串
题目大意:输入有一个T,表示有T组测试数据,然后输入三个字符串,问第三个字符串能否由第一个和第二个字符串拼接而来,拼接的规则是第一个和第二个字符串在新的字符串中的前后的相对的顺序不能改变,问第三个字符 ...
- thinkphp5学习总结!
数据库操作之原生sql操作 <?php namespace app\index\controller; use think\Db; class Index { public function i ...
- 分享一个C#创建Barcode的DLL
用于工作需要产生Barcode,随手从网上找了一个DLL(原文地址忘了) http://files.cnblogs.com/panchunting/barcode_bin.zip 使用非常简单,只需添 ...