日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

WPF纯手工两步打造图片切割工具(一)

發布時間:2025/5/22 asp.net 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WPF纯手工两步打造图片切割工具(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、功能說明
1、四種圖片切割方式:縮放:指定寬高(可能變形)、縮放:指定寬(高按比例)、縮放:指定高(寬按比例)、裁減:指定寬高。
2、批量圖片切割。
3、目標存儲區同名文件處理:直接覆蓋、重新命名。
4、支持水印文字添加(圖片右下角10px)。
5、動畫效果。
6、支持自設定插補模式和呈現質量。 本文分兩部分:
(一)界面布局及數據初始化
(二)編碼實現 效果預覽: 上周末無聊至極出去溜達,順便帶著相機抓了一些有趣的東西,回來本來打算共享的網上,可是當從相機把照片導到電腦上時,幾十張的高像素圖片最小的也有5M!如果原圖上傳到網上,即使有網站給充足的空間,但網速也會影響上傳及瀏覽效果。沒辦法就用Photoshop一張張修改,還沒處理10張就煩的頭頂!圖像->圖像大小-> 寬高->確定!重復!并且PS加載高像素圖也很慢。所以干脆用WPF拖幾個控件,造一個方便的圖片切割小工具,對圖像質量要求不很高的話足夠用了。 二、布局 1、窗體布局
窗口上最上方是操作區,包括一些設置和啟動轉換等操作,中間區域是圖片預覽區域,每一張要處理的圖片都會顯示在中間區域,最下方是縮略圖列表,每一張處理的圖片都會添加到這里。當鼠標移動到縮略圖列表圖像上時,在中間區域也會顯示該圖的放大版。通過XAML可以很清楚的看出整個窗口分上、中、下三部分:
?
XAML布局:
第一個Grid行里放置操作項的相關控件: 1 <GroupBox x:Name="gpSet" Header="設置" Height="116" HorizontalAlignment="Left" VerticalAlignment="Top" Width="794" Foreground="White">
2 <Grid>
3
4 ?</Grid>
5 </GroupBox> 第二個Grid行里放置動畫處理所用到的Image和進度條: <Canvas Grid.Row="1" HorizontalAlignment="Left" Name="canvas1" VerticalAlignment="Top" Height="334" Width="778">
<Image Name="imgMain" Opacity="0" Canvas.Left="1" Canvas.Top="-114" Height="557" Stretch="Fill" Width="778">
<Image.RenderTransform>
<TransformGroup>
<ScaleTransform CenterX="400" CenterY="300"/>
<RotateTransform CenterX="400" CenterY="300"/>
<TranslateTransform Y="0"/>
</TransformGroup>
</Image.RenderTransform>
<Image.Effect>
<DropShadowEffect Color="Black" BlurRadius="5" Direction="-45" ShadowDepth="5"/>
</Image.Effect>
</Image>
</Canvas>
<my:UcProgressBar Grid.Row="1" HorizontalAlignment="Left" Margin="0,314,0,0" x:Name="ucProgressBar1" VerticalAlignment="Top" Width="794"/> 第三個Grid行里放置縮略圖列表控件: <ScrollViewer x:Name="scrolls" Margin="0,0,0,0" Grid.Row="2" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" Height="110" Width="794" MouseLeave="scrolls_MouseLeave">
<ScrollViewer.Background>
<LinearGradientBrush EndPoint="0.5,1" MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
<GradientStop Color="#55F3F384" Offset="0.408"/>
<GradientStop Color="#AA056012" Offset="1"/>
<GradientStop Color="#AA056012"/>
</LinearGradientBrush>
</ScrollViewer.Background>
<StackPanel x:Name="spnlView" Margin="0,0,0,0" Height="90" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Top" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Hidden"/>
</ScrollViewer> 其中為了方便使縮略圖列表在有限的寬度內全部顯示,必須用橫向滾動條處理,外面放置ScrollViewer指定寬度:788px,并讓其顯示橫向滾動條。內置的StackPanel不設置寬度,使其根據內容自適應寬,如此以來便可以借助ScrollViewer的橫向滾動條瀏覽所有的縮略圖。
2、邏輯處理
當圖片處理操作啟動后,每個待處理的圖片都會從主區域以動畫從無到有地移動到最下方的縮略圖列表中:動畫開始——移動(透明度、大小,位置)——處理圖片切割——添加到縮略圖列表——下一個動畫開始。。。如此反復所有被選中的圖片。 3、數據初始化
處理選項設置了多個自定義,為了方便方便窗體選擇操作,所以構造了枚舉的集合以填充下拉列表,這里要進行選項列表與枚舉的轉。
(1)插補模式(InterpolationModeData):System.Drawing.Drawing2D.InterpolationMode 枚舉指定在縮放或旋轉圖像時使用的算法。 View Code 1 ///<summary>
2 /// 插補模式 System.Drawing.Drawing2D.InterpolationMode 枚舉指定在縮放或旋轉圖像時使用的算法
3 ///</summary>
4 ?publicclass InterpolationModeData
5 {
6 ///<summary>
7 /// 插補模式
8 ///</summary>
9 ///<returns></returns>
10 ?publicstatic List<InterpolationModeItem> GetInterpolationModes()
11 {
12 List<InterpolationModeItem> list =new List<InterpolationModeItem>();
13 //list.Add(new InterpolationModeItem() { Key = -1, Text = "Invalid" });
14 ? list.Add(new InterpolationModeItem() { Key =0, Text ="Default" });
15 list.Add(new InterpolationModeItem() { Key =1, Text ="Low" });
16 list.Add(new InterpolationModeItem() { Key =2, Text ="High" });
17 list.Add(new InterpolationModeItem() { Key =3, Text ="Bilinear" });
18 list.Add(new InterpolationModeItem() { Key =4, Text ="Bicubic" });
19 list.Add(new InterpolationModeItem() { Key =5, Text ="NearestNeighbor" });
20 list.Add(new InterpolationModeItem() { Key =6, Text ="HighQualityBilinear" });
21 list.Add(new InterpolationModeItem() { Key =7, Text ="HighQualityBicubic" });
22 return list;
23 }
24 }
25
26 ///<summary>
27 ///
28 ///</summary>
29 ?publicclass InterpolationModeItem
30 {
31 int _key;
32
33 publicint Key
34 {
35 get { return _key; }
36 set { _key = value; }
37 }
38 string _text;
39
40 publicstring Text
41 {
42 get { return _text; }
43 set { _text = value; }
44 }
45 } (2)呈現質量(SmoothingModeData):System.Drawing.Drawing2D. SmoothingMode 枚舉指定是否將平滑處理(抗鋸齒)應用于直線、曲線和已填充區域的邊緣。 View Code 1 ///<summary>
2 /// 呈現質量:指定是否將平滑處理(抗鋸齒)應用于直線、曲線和已填充區域的邊緣
3 ///</summary>
4 ?publicclass SmoothingModeData
5 {
6 ///<summary>
7 /// 呈現質量
8 ///</summary>
9 ///<returns></returns>
10 ?publicstatic List<SmoothingModeItem> GetSmoothingModes()
11 {
12 List<SmoothingModeItem> list =new List<SmoothingModeItem>();
13 //list.Add(new SmoothingModeItem() { Key = -1, Text = "Invalid" });
14 ? list.Add(new SmoothingModeItem() { Key =0, Text ="Default" });
15 list.Add(new SmoothingModeItem() { Key =1, Text ="HighSpeed" });
16 list.Add(new SmoothingModeItem() { Key =2, Text ="HighQuality" });
17 list.Add(new SmoothingModeItem() { Key =3, Text ="None" });
18 list.Add(new SmoothingModeItem() { Key =4, Text ="AntiAlias" });
19 return list;
20 }
21 }
22
23 publicclass SmoothingModeItem
24 {
25 int _key;
26
27 publicint Key
28 {
29 get { return _key; }
30 set { _key = value; }
31 }
32 string _text;
33
34 publicstring Text
35 {
36 get { return _text; }
37 set { _text = value; }
38 }
39 } (3)圖片處理方式(TailorTypeData):縮放:指定寬高(可能變形)、縮放:指定寬(高按比例)、縮放:指定高(寬按比例)、裁減:指定寬高。根據處理方式的不同決定是否必須填寫寬或高。 View Code 1 publicclass TailorTypeData
2 {
3 publicstatic List<TailorTypeItem> GetTailorTypes()
4 {
5 List<TailorTypeItem> list =null;
6 list =new List<TailorTypeItem>();
7 list.Add(new TailorTypeItem() { Key ="WH", Text ="縮放:指定寬高(可能變形)" });
8 list.Add(new TailorTypeItem() { Key ="W", Text ="縮放:指定寬(高按比例)" });
9 list.Add(new TailorTypeItem() { Key ="H", Text ="縮放:指定高(寬按比例)" });
10 list.Add(new TailorTypeItem() { Key ="Cut", Text ="裁減:指定寬高" });
11 return list;
12 }
13 }
14
15 publicclass TailorTypeItem
16 {
17 string _key;
18
19 publicstring Key
20 {
21 get { return _key; }
22 set { _key = value; }
23 }
24 string _text;
25
26 publicstring Text
27 {
28 get { return _text; }
29 set { _text = value; }
30 }
31 } (4)選擇圖片資源
由于要支持批量處理,所以在選擇待處理圖片的時候應該可以多選,并且設定在打開目錄窗口時只顯示圖片資源:*.jpg *.gif *.png。 1 System.Windows.Forms.OpenFileDialog ofd =new System.Windows.Forms.OpenFileDialog();
2 ofd.Multiselect =true;
3 ofd.Filter ="圖片文件(*.jpg *.gif *.png)|*.jpg;*.gif;*.png|All Files (*.*)|*.*"; 這一節就到這里,下一節主要描述邏輯編碼部分,爭取達到盡量詳盡明了試用下載 謝謝您能提出改善意見!

轉載于:https://www.cnblogs.com/solan/archive/2011/04/08/2009231.html

總結

以上是生活随笔為你收集整理的WPF纯手工两步打造图片切割工具(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色免费视频| 久久精品国产亚洲AV无码男同 | 欧美日比视频 | 久久精品第一页 | 欧美日韩电影一区二区 | 欧美一级免费视频 | 香蕉福利| 女生喷液视频 | av男人的天堂在线观看 | 天堂99| 亚洲精品免费电影 | 欧美日韩一区二区三区电影 | 毛片一级片 | 亚欧在线播放 | 肉色超薄丝袜脚交一区二区图片 | 中文字幕av高清片 | 欲乱美女| 九九爱国产| 免费高清视频在线观看 | 欧美激情图区 | 国产高清一区 | 免费看黄在线网站 | 中文综合网 | 欧美日韩电影一区二区三区 | 亚洲av日韩精品久久久久久久 | 天天做日日干 | 亚洲宅男天堂 | 日韩精品在线观看视频 | 中文字幕观看视频 | 超碰最新在线 | 欧美视频一级 | 午夜精品999 | 欧美亚洲天堂 | 久久精品国产99国产精品 | 久久婷婷av | 午夜有码 | 国产视频999 | 中国久久久久 | av在线观看地址 | 国产欧美一区二区三区精品酒店 | 日本爽爽 | 浪浪视频污 | 国产美女精品久久久 | 床戏高潮做进去大尺度视频 | 日韩av一区二区三区四区 | 九色av| xxxxx在线观看 | 欧美调教视频 | 国产freexxxx性播放麻豆 | 日本三级中文字幕在线观看 | 草草影院在线免费观看 | 日韩欧美一区二区视频 | 成人精品视频在线观看 | 免费成人美女在线观看 | 久操视频网 | 欧美日韩成人一区二区三区 | 国产91丝袜在线播放0 | 奇米影| 99精品视频在线观看免费 | 免费在线视频一区 | 色中文字幕在线观看 | 男人天堂综合网 | 人妻在线日韩免费视频 | 久久综合久久88 | 黑人一级黄色片 | 日韩欧美亚洲国产 | 国产一二在线 | 在线免费av网 | 丁香婷婷在线观看 | 少妇被躁爽到高潮无码人狍大战 | 欧美黑人一区二区 | 青青青免费在线视频 | 99视频在线免费 | 求毛片网站 | 日韩影视一区 | 久久影音 | 一级日韩毛片 | 免费观看理伦片在线播放视频软件 | 亚洲男人在线 | 亚洲欧美日本国产 | 高潮网 | a天堂亚洲 | 午夜免费激情视频 | 日本不卡123 | 欧美日韩精品二区 | 亚洲熟女乱色综合亚洲av | 亚洲第一色站 | 日韩在线视频观看 | 一区二区在线免费 | 猫咪av网| 精品人妻一区二区三区日产乱码 | 黑人爱爱视频 | 国产成人免费视频 | 成人自拍网| 自拍视频一区 | 国产一级做a爱免费视频 | 麻豆av免费看 | 亚洲五码在线 | 黄色网址最新 |