【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 ...
随机推荐
- python的面向对象-面向对象设计
1.面向对象设计 def school(name,addr,type):#定义一个大函数的作用就是不能让狗调用学校的方法 #学校动作 def kaoshi(school): print("[ ...
- 数据结构(三)串---KMP模式匹配算法实现及优化
KMP算法实现 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include ...
- javascript构造函数强制使用new
如果有时候我们忘记对构造函数使用new的话,构造函数的this将指向window function Person(){ this.name = 'Julie'; } var good_moring = ...
- [机器学习&数据挖掘]SVM---软间隔最大化
根据上个硬间隔最大化已经知道,在解决线性可分数据集的分类问题时,求得拉格朗日乘子.w.b就得到分离超平面,然后就可以进行分类,软间隔最大化是针对非线性可分的数据集,因为并不是数据集在可分的时候会出现一 ...
- Hash::make与Hash::check
调用方法之前要先去引用: use Illuminate\Support\Facades\Hash; 可以调用 Hash 门面上的 make 方法对存储密码进行哈希: $pwd = Hash::make ...
- 第八集:魔法阵 NTT求循环卷积
题目来源:http://www.fjutacm.com/Problem.jsp?pid=3283 题意:给两串长度为n的数组a和b,视为环,a和b可以在任意位置开始互相匹配得到这个函数的值,求这个函数 ...
- 基于theano的多层感知机的实现
1.引言 一个多层感知机(Multi-Layer Perceptron,MLP)可以看做是,在逻辑回归分类器的中间加了非线性转换的隐层,这种转换把数据映射到一个线性可分的空间.一个单隐层的MLP就可以 ...
- BGM时长
1.can u feel it 00:08-00:30 22s 2.纤夫的爱 00:43-00:54 11s 3.渡情 00:55-01:52 57s 4.nobody 01:56-02:25 29s ...
- nginx 反向代理Apache
2014年1月13日 18:15:25 同一个域名下,不同uri走不同的应用(不同的web根目录) 实现方式: Apache分别监听两个端口,对应不同的应用 nginx监听80端口,利用locatio ...
- mysql ON DUPLICATE KEY UPDATE重复插入时更新
mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (c ...