diff --git a/Constant/Constants.cs b/Constant/Constants.cs
new file mode 100644
index 0000000..4bcf294
--- /dev/null
+++ b/Constant/Constants.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GeekDesk.Constant
+{
+ public class Constants
+ {
+ //默认文件夹图标
+ public static string DEFAULT_DIR_IMAGE_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACtWK6eAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAASISURBVHhe7dvPi9R1HMfx/Qu6RYfqEp1CZ8Yko0MQRNEPgnQ36FJEFyPoF/0DHbx06dSlnVkF6SgEgocOYUEG0cFWpQ476yhbQfTDslJxk+k79S1IP/NSF3f2O+7jBY/TKgvz/j5nXMUZMzMzMzMzMzMzMzMzMzMzu959023dsbSw9YGlbuchyk7v3XbP0t5tt9Yvmd3MW3r//luWu623TvbahytDrtvBQa/9xvJ85776JbWbZf359s7quCcKR2cNqjeaQ/35zgv1y2vTvOqgOy4/MDdG9abzwWC+06lfapu2jf4cXTosN9SZ5W7n9folt2nZ6Ifw6niDy47JelloH6hfepuGLffa7xQPyfpZaL9Xv/zW5K307r27eEDWXfXG9GJ9BmvqqneyV0rHYzL63a3b61NYEzfodT4rHY4J8UetZq/6mF8pHo6J8SnS4JUOxqS19tTnsKatfDAm7Hh9DmvaCsdiAwx6rcfqk1iTVjoWkzfotd+uT2JNWulYTN5yr/VFfRJr0krHYoN0t7Tqs1hTVjwUG6L6OeS1+izWlJUOxYb5xb+JNGyFI7Gxfqp+YN83+h+drK/+wtbH+3u33FmnUF7hQLCpLPfaSycX2u/WSfx/pd8Am1H1yf3d6FOlTuOflX4hbGrd1vN1HgKBou6W2wQC4+0XCASnuu1dAoGxWnsEAmMMeq1DAoExRn/tKxAIBALBmgMZ7Nsx/Pbgc9B4J3udK57fa7WmQEbf1GyatnLg6eKzfDVrCuTcypH625pNx37rHyo+y1ezpkAufL9Yf1uz6dgfpz8uPstXIxDbFBOIWZhAzMIEYhYmELMwgZiFCcQsTCBmYQIxCxOIWZhAzMIEYhYmELMwgZiFrTmQ0/u3D89+8tjw/OdPXbPVr18eXlp6E6bG6le7i8/yOL8efnR4at+24czvR54Y/nl8DrjM6INjpvQFYG548ehOgcA4AoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCC4e3XVJIDBG9QmyKhAY4+Li7HmBwBirx2bPCgTGOTH3g0BgHIFAIBAI6kDOXPEFoDLbn7l0bG53+YuwyS3OPTsz2oVjs3etLs49OM65T5/c9fNHj7z044cPvwrTbvQsj57p0rP+r3NfPnP733GYmZmZmZmZmZmZmZmZmZnZf5uZ+QsdP8v10G4AYgAAAABJRU5ErkJggg==";
+
+ //默认图片图标
+ public static string DEFAULT_IMG_IMAGE_BASE64 = "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";
+ }
+}
diff --git a/Constant/DefaultConstant.cs b/Constant/DefaultConstant.cs
index 56a286b..1804108 100644
--- a/Constant/DefaultConstant.cs
+++ b/Constant/DefaultConstant.cs
@@ -5,9 +5,9 @@ namespace GeekDesk.Constant
{
enum DefaultConstant
{
- WINDOW_WIDTH = 650, //默认窗体宽度
- WINDOW_HEIGHT = 700, //默认窗体高度
- MENU_CARD_WIDHT = 150, //默认菜单栏宽度
+ WINDOW_WIDTH = 666, //默认窗体宽度
+ WINDOW_HEIGHT = 500, //默认窗体高度
+ MENU_CARD_WIDHT = 165, //默认菜单栏宽度
IMAGE_WIDTH = 60, //默认图标宽度
IMAGE_HEIGHT = 60, //默认图标高度
}
diff --git a/Constant/IconStartType.cs b/Constant/IconStartType.cs
new file mode 100644
index 0000000..f3398ec
--- /dev/null
+++ b/Constant/IconStartType.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+///
+/// 图标应用启动方式
+///
+namespace GeekDesk.Constant
+{
+ enum IconStartType
+ {
+ DEFAULT_STARTUP = 1, //默认启动方式
+ ADMIN_STARTUP = 2, //管理员方式启动
+ SHOW_IN_EXPLORE = 3 //打开文件所在位置
+ }
+}
diff --git a/Control/IconInfoDialog.xaml b/Control/IconInfoDialog.xaml
new file mode 100644
index 0000000..8fe3093
--- /dev/null
+++ b/Control/IconInfoDialog.xaml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Control/IconInfoDialog.xaml.cs b/Control/IconInfoDialog.xaml.cs
new file mode 100644
index 0000000..862664c
--- /dev/null
+++ b/Control/IconInfoDialog.xaml.cs
@@ -0,0 +1,74 @@
+using GeekDesk.Util;
+using GeekDesk.ViewModel;
+using Microsoft.Win32;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Media.Imaging;
+
+
+namespace GeekDesk.Control
+{
+ ///
+ /// TextDialog.xaml 的交互逻辑
+ ///
+ public partial class IconInfoDialog
+ {
+
+ public IconInfoDialog()
+ {
+ InitializeComponent();
+ }
+
+ public IconInfoDialog(IconInfo info)
+ {
+ this.DataContext = info;
+ InitializeComponent();
+ }
+
+ ///
+ /// 保存修改属性
+ ///
+ ///
+ ///
+ private void SaveProperty(object sender, RoutedEventArgs e)
+ {
+ IconInfo info = this.DataContext as IconInfo;
+ info.BitmapImage = IconImg.Source as BitmapImage;
+ info.Name = IconName.Text;
+ info.AdminStartUp = IconIsAdmin.IsChecked.Value;
+ CommonCode.SaveAppData(MainWindow.appData);
+ }
+
+ ///
+ /// 修改图标为默认
+ ///
+ ///
+ ///
+ private void EditImageToDefault(object sender, RoutedEventArgs e)
+ {
+ IconInfo info = ((Button)sender).Tag as IconInfo;
+ info.BitmapImage = ImageUtil.ByteArrToImage(info.DefaultImage);
+ CommonCode.SaveAppData(MainWindow.appData);
+ }
+
+ ///
+ /// 修改图标
+ ///
+ ///
+ ///
+ private void EditImage(object sender, RoutedEventArgs e)
+ {
+ OpenFileDialog ofd = new OpenFileDialog
+ {
+ Multiselect = false, //只允许选中单个文件
+ Filter = "所有文件(*.*)|*.*"
+ };
+ if (ofd.ShowDialog() == true)
+ {
+ IconInfo info = this.DataContext as IconInfo;
+ info.BitmapImage = ImageUtil.GetBitmapIconByPath(ofd.FileName);
+ CommonCode.SaveAppData(MainWindow.appData);
+ }
+ }
+ }
+}
diff --git a/GeekDesk.csproj b/GeekDesk.csproj
index 9a5f64b..2e11a81 100644
--- a/GeekDesk.csproj
+++ b/GeekDesk.csproj
@@ -71,8 +71,13 @@
+
+
+
+ IconInfoDialog.xaml
+
@@ -82,6 +87,7 @@
+
@@ -91,6 +97,10 @@
+
+ Designer
+ MSBuild:Compile
+
MSBuild:Compile
Designer
@@ -139,6 +149,8 @@
+
+
diff --git a/MainWindow.xaml b/MainWindow.xaml
index f43a993..53760ee 100644
--- a/MainWindow.xaml
+++ b/MainWindow.xaml
@@ -10,6 +10,10 @@
xmlns:DraggAnimatedPanel="clr-namespace:DraggAnimatedPanel" x:Name="window"
xmlns:hc="https://handyorg.github.io/handycontrol"
Title="MainWindow" Height="500" Width="600"
+ WindowStyle="None"
+ AllowsTransparency="True"
+ Background="Transparent"
+ OpacityMask ="White"
>
@@ -17,11 +21,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index ff717ba..55a7737 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -1,11 +1,11 @@
using DraggAnimatedPanelExample;
+using GeekDesk.Constant;
+using GeekDesk.Control;
using GeekDesk.Util;
using GeekDesk.ViewModel;
using System;
-using System.Collections;
-using System.Collections.Generic;
using System.Collections.ObjectModel;
-using System.ComponentModel;
+using System.Diagnostics;
using System.IO;
using System.Windows;
using System.Windows.Controls;
@@ -21,7 +21,7 @@ namespace GeekDesk
public partial class MainWindow : Window
{
- private AppData appData = CommonCode.GetAppDataByFile();
+ public static AppData appData = CommonCode.GetAppDataByFile();
private int menuSelectIndexTemp = -1;
public MainWindow()
{
@@ -40,9 +40,10 @@ namespace GeekDesk
this.DataContext = appData;
if (appData.MenuList.Count == 0)
{
- appData.MenuList.Add(new MenuInfo() { MenuName = "NewGouop", MenuId = System.Guid.NewGuid().ToString(), MenuEdit = (int)Visibility.Collapsed});
+ appData.MenuList.Add(new MenuInfo() { MenuName = "NewMenu", MenuId = System.Guid.NewGuid().ToString(), MenuEdit = (int)Visibility.Collapsed});
}
//窗体大小
+ LeftColumn.Width = new GridLength(appData.AppConfig.MenuCardWidth);
this.Width = appData.AppConfig.WindowWidth;
this.Height = appData.AppConfig.WindowHeight;
//选中 菜单
@@ -64,18 +65,13 @@ namespace GeekDesk
{
int fromS = indexes[0];
int to = indexes[1];
- var elementSource = icons.Items[to];
- var dragged = icons.Items[fromS];
- if (fromS > to)
- {
- icons.Items.Remove(dragged);
- icons.Items.Insert(to, dragged);
- }
- else
- {
- icons.Items.Remove(dragged);
- icons.Items.Insert(to, dragged);
- }
+ ObservableCollection iconList = appData.MenuList[menus.SelectedIndex].IconList;
+ var elementSource = iconList[to];
+ var dragged = iconList[fromS];
+
+ iconList.Remove(dragged);
+ iconList.Insert(to, dragged);
+ CommonCode.SaveAppData(appData);
}
);
return _swap;
@@ -96,19 +92,11 @@ namespace GeekDesk
ObservableCollection menuList = appData.MenuList;
var elementSource = menuList[to];
var dragged = menuList[fromS];
- if (fromS > to)
- {
- menuList.Remove(dragged);
- menuList.Insert(to, dragged);
- }
- else
- {
- menuList.Remove(dragged);
- menuList.Insert(to, dragged);
- }
+ menuList.Remove(dragged);
+ menuList.Insert(to, dragged);
+ menus.SelectedIndex = to;
appData.MenuList = menuList;
- //menus.Items.Refresh();
-
+ CommonCode.SaveAppData(appData);
}
);
return _swap2;
@@ -124,33 +112,27 @@ namespace GeekDesk
foreach (object obj in dropObject)
{
string path = (string)obj;
- if (File.Exists(path))
- {
- // 文件
- BitmapImage bi = FileIcon.GetBitmapImage(path);
- IconInfo iconInfo = new IconInfo();
- iconInfo.Path = path;
- iconInfo.BitmapImage = bi;
- iconInfo.Name = Path.GetFileNameWithoutExtension(path);
- appData.MenuList[menus.SelectedIndex].IconList.Add(iconInfo);
- CommonCode.SaveAppData(appData);
- }
- else if (Directory.Exists(path))
+ IconInfo iconInfo = new IconInfo
{
- //文件夹
-
- }
+ Path = path,
+ BitmapImage = ImageUtil.GetBitmapIconByPath(path)
+ };
+ iconInfo.DefaultImage = iconInfo.ImageByteArr;
+ iconInfo.Name = Path.GetFileNameWithoutExtension(path);
+ appData.MenuList[menus.SelectedIndex].IconList.Add(iconInfo);
}
- icons.Items.Refresh();
+ CommonCode.SaveAppData(appData);
}
- //菜单点击事件
- private void MenuClick(object sender, SelectionChangedEventArgs e)
+
+ ////菜单点击事件
+ private void MenuClick(object sender, MouseButtonEventArgs e)
{
//设置对应菜单的图标列表
- icons.ItemsSource = appData.MenuList[menus.SelectedIndex].IconList;
- appData.AppConfig.SelectedMenuIndex = menus.SelectedIndex;
+ MenuInfo mi = (MenuInfo)(((StackPanel)sender).Tag);
+ icons.ItemsSource = mi.IconList;
+ appData.AppConfig.SelectedMenuIndex = menus.Items.IndexOf(mi);
CommonCode.SaveAppData(appData);
}
@@ -164,11 +146,81 @@ namespace GeekDesk
private void IconClick(object sender, MouseButtonEventArgs e)
{
IconInfo icon = (IconInfo)((StackPanel)sender).Tag;
- System.Diagnostics.Process.Start(icon.Path);
- icon.Count++;
- CommonCode.SaveAppData(appData);
+ if (icon.AdminStartUp)
+ {
+ StartIconApp(icon, IconStartType.ADMIN_STARTUP);
+ }
+ else
+ {
+ StartIconApp(icon, IconStartType.DEFAULT_STARTUP);
+ }
}
+ ///
+ /// 管理员方式启动
+ ///
+ ///
+ ///
+ private void IconAdminStart(object sender, RoutedEventArgs e)
+ {
+ IconInfo icon = (IconInfo)((MenuItem)sender).Tag;
+ StartIconApp(icon, IconStartType.ADMIN_STARTUP);
+ }
+
+ ///
+ /// 打开文件所在位置
+ ///
+ ///
+ ///
+ private void ShowInExplore(object sender, RoutedEventArgs e)
+ {
+ IconInfo icon = (IconInfo)((MenuItem)sender).Tag;
+ StartIconApp(icon, IconStartType.SHOW_IN_EXPLORE);
+ }
+
+ private void StartIconApp(IconInfo icon, IconStartType type)
+ {
+ try
+ {
+
+ if (!File.Exists(icon.Path) && !Directory.Exists(icon.Path))
+ {
+ HandyControl.Controls.Growl.WarningGlobal("程序启动失败(文件路径不存在或已删除)!");
+ return;
+ }
+
+ Process p = new Process();
+ p.StartInfo.FileName = icon.Path;
+
+ switch (type) {
+ case IconStartType.ADMIN_STARTUP:
+ p.StartInfo.Arguments = "1";//启动参数
+ p.StartInfo.Verb = "runas";
+ p.StartInfo.CreateNoWindow = false; //设置显示窗口
+ p.StartInfo.UseShellExecute = false;//不使用操作系统外壳程序启动进程
+ p.StartInfo.ErrorDialog = false;
+ this.Visibility = Visibility.Collapsed;
+ break;// c#好像不能case穿透
+ case IconStartType.DEFAULT_STARTUP:
+ this.Visibility = Visibility.Collapsed;
+ break;
+ case IconStartType.SHOW_IN_EXPLORE:
+ p.StartInfo.FileName = "Explorer.exe";
+ p.StartInfo.Arguments = "/e,/select," + icon.Path;
+ break;
+ }
+ p.Start();
+ icon.Count++;
+ CommonCode.SaveAppData(appData);
+ } catch (Exception)
+ {
+ HandyControl.Controls.Growl.WarningGlobal("程序启动失败(不支持的启动方式)!");
+ }
+
+ }
+
+
+
///
/// data选中事件 设置不可选中
///
@@ -313,7 +365,7 @@ namespace GeekDesk
///
private void CreateMenu(object sender, RoutedEventArgs e)
{
- appData.MenuList.Add(new MenuInfo() { MenuEdit = (int)Visibility.Collapsed, MenuId = System.Guid.NewGuid().ToString(), MenuName = "NewGouop" });
+ appData.MenuList.Add(new MenuInfo() { MenuEdit = (int)Visibility.Collapsed, MenuId = System.Guid.NewGuid().ToString(), MenuName = "NewMenu" });
menus.SelectedIndex = appData.MenuList.Count - 1;
//appData.MenuList[appData.MenuList.Count - 1].MenuEdit = (int)Visibility.Visible;
CommonCode.SaveAppData(appData);
@@ -345,6 +397,37 @@ namespace GeekDesk
}
}
+ ///
+ /// 弹出Icon属性修改面板
+ ///
+ ///
+ ///
+ private void PropertyConfig(object sender, RoutedEventArgs e)
+ {
+ HandyControl.Controls.Dialog.Show(new IconInfoDialog((IconInfo)((MenuItem)sender).Tag));
+ }
+
+ ///
+ /// 从列表删除图标
+ ///
+ ///
+ ///
+ private void RemoveIcon(object sender, RoutedEventArgs e)
+ {
+ appData.MenuList[menus.SelectedIndex].IconList.Remove((IconInfo)((MenuItem)sender).Tag);
+ CommonCode.SaveAppData(appData);
+ }
+
+ ///
+ /// 左侧栏宽度改变 持久化
+ ///
+ ///
+ ///
+ private void LeftCardResize(object sender, System.Windows.Controls.Primitives.DragCompletedEventArgs e)
+ {
+ appData.AppConfig.MenuCardWidth = LeftColumn.Width.Value;
+ CommonCode.SaveAppData(appData);
+ }
}
diff --git a/Resource/Image/图片.png b/Resource/Image/图片.png
new file mode 100644
index 0000000..35d091c
Binary files /dev/null and b/Resource/Image/图片.png differ
diff --git a/Resource/Image/文件夹.png b/Resource/Image/文件夹.png
new file mode 100644
index 0000000..58993ae
Binary files /dev/null and b/Resource/Image/文件夹.png differ
diff --git a/Util/FileIcon.cs b/Util/FileIcon.cs
index 2e20f3b..2816f5c 100644
--- a/Util/FileIcon.cs
+++ b/Util/FileIcon.cs
@@ -19,23 +19,6 @@ namespace GeekDesk.Util
public static BitmapImage GetBitmapImage(string filePath)
{
- //Icon ico;
- //BitmapImage bmpImage = null;
- //MemoryStream strm;
- //using (ico = GetIcon(filePath))
- //{
- // Bitmap bmp = ico.ToBitmap();
- // using (strm = new MemoryStream())
- // {
- // bmp.Save(strm, System.Drawing.Imaging.ImageFormat.Png);
- // bmpImage = new BitmapImage();
- // bmpImage.BeginInit();
- // strm.Seek(0, SeekOrigin.Begin);
- // bmpImage.StreamSource = strm;
- // bmpImage.EndInit();
- // }
- //}
- //return bmpImage;
Icon ico = GetIcon(filePath);
Bitmap bmp = ico.ToBitmap();
MemoryStream strm = new MemoryStream();
diff --git a/Util/ImageUtil.cs b/Util/ImageUtil.cs
new file mode 100644
index 0000000..58e7410
--- /dev/null
+++ b/Util/ImageUtil.cs
@@ -0,0 +1,207 @@
+using GeekDesk.Constant;
+using System;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.IO;
+using System.Windows.Media.Imaging;
+
+namespace GeekDesk.Util
+{
+ class ImageUtil
+ {
+
+ ///
+ /// 图片数组转 BitmapImage
+ ///
+ ///
+ ///
+ public static BitmapImage ByteArrToImage(byte[] array)
+ {
+ using (var ms = new System.IO.MemoryStream(array))
+ {
+ var image = new BitmapImage();
+ image.BeginInit();
+ image.CacheOption = BitmapCacheOption.OnLoad; // here
+ image.StreamSource = ms;
+ image.EndInit();
+ return image;
+ }
+ }
+
+ ///
+ /// BitmapImage 转数组
+ ///
+ ///
+ ///
+ public static byte[] BitmapImageToByte(BitmapImage bi)
+ {
+ using (MemoryStream memStream = new MemoryStream())
+ {
+ PngBitmapEncoder encoder = new PngBitmapEncoder();
+ encoder.Frames.Add(BitmapFrame.Create(bi));
+ encoder.Save(memStream);
+ return memStream.GetBuffer();
+ }
+ }
+
+ ///
+ /// 图片base64 转 BitmapImage
+ ///
+ ///
+ ///
+ public static BitmapImage Base64ToBitmapImage(string base64)
+ {
+ byte[] byteBuffer = Convert.FromBase64String(base64);
+ return ByteArrToImage(byteBuffer);
+ }
+
+ ///
+ /// 获取文件 icon
+ ///
+ /// 文件路径
+ ///
+ public static BitmapImage GetBitmapIconByPath(string filePath)
+ {
+ if (File.Exists(filePath))
+ {
+ if (IsImage(filePath)) {
+ //图片
+ return GetThumbnail(filePath, 256, 256);
+ } else
+ { //其它文件
+ return FileIcon.GetBitmapImage(filePath);
+ }
+ } else if(Directory.Exists(filePath)) {
+ //文件夹
+ return ImageUtil.Base64ToBitmapImage(Constants.DEFAULT_DIR_IMAGE_BASE64);
+ }
+ return null;
+ }
+
+
+ ///
+ ///
+ ///
+ /// 需要改变大小的图片位置
+ /// 缩略图的宽度
+ /// 缩略图的高度
+ ///
+ public static BitmapImage GetThumbnail(string lcFilename, int lnWidth, int lnHeight)
+ {
+ Bitmap bmpOut = null;
+ try
+ {
+ Bitmap loBMP = new Bitmap(lcFilename);
+ ImageFormat loFormat = loBMP.RawFormat;
+
+ decimal lnRatio;
+ int lnNewWidth = 0;
+ int lnNewHeight = 0;
+
+ //如果图像小于缩略图直接返回原图,因为upfront
+ if (loBMP.Width < lnWidth && loBMP.Height < lnHeight)
+ return BitmapToBitmapImage(bmpOut);
+ if (loBMP.Width > loBMP.Height)
+ {
+ lnRatio = (decimal)lnWidth / loBMP.Width;
+ lnNewWidth = lnWidth;
+ decimal lnTemp = loBMP.Height * lnRatio;
+ lnNewHeight = (int)lnTemp;
+ }
+ else
+ {
+ lnRatio = (decimal)lnHeight / loBMP.Height;
+ lnNewHeight = lnHeight;
+ decimal lnTemp = loBMP.Width * lnRatio;
+ lnNewWidth = (int)lnTemp;
+ }
+ bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
+ Graphics g = Graphics.FromImage(bmpOut);
+ g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
+ g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight);
+ g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);
+ loBMP.Dispose();
+ }
+ catch
+ {
+ return Base64ToBitmapImage(Constants.DEFAULT_IMG_IMAGE_BASE64);
+ }
+ return BitmapToBitmapImage(bmpOut);
+ }
+
+
+ ///
+ /// Bitmap to BitmapImage
+ ///
+ ///
+ ///
+ private static BitmapImage BitmapToBitmapImage(Bitmap bitmap)
+ {
+ BitmapImage bitmapImage = new BitmapImage();
+ using (MemoryStream ms = new MemoryStream())
+ {
+ bitmap.Save(ms, bitmap.RawFormat);
+ bitmapImage.BeginInit();
+ bitmapImage.StreamSource = ms;
+ bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
+ bitmapImage.EndInit();
+ bitmapImage.Freeze();
+ }
+ return bitmapImage;
+ }
+
+ ///
+ /// 图片文件转base64
+ ///
+ ///
+ ///
+ public static string FileImageToBase64(string Imagefilename, ImageFormat format)
+ {
+ try
+ {
+ Bitmap bmp = new Bitmap(Imagefilename);
+
+ MemoryStream ms = new MemoryStream();
+ bmp.Save(ms, format);
+ byte[] arr = new byte[ms.Length];
+ ms.Position = 0;
+ ms.Read(arr, 0, (int)ms.Length);
+ ms.Close();
+ return Convert.ToBase64String(arr);
+ }
+ catch (Exception)
+ {
+ return null;
+ }
+ }
+
+ ///
+ /// 判断文件是否为图片
+ ///
+ /// 文件路径
+ ///
+ public static bool IsImage(string path)
+ {
+ try
+ {
+ string strExt = Path.GetExtension(path).Substring(1);
+ string suffixs = "bmp,jpg,png,tif,gif,pcx,tga,exif,fpx,svg,psd,cdr,pcd,dxf,ufo,eps,ai,raw,WMF,webp,avif";
+ string[] suffixArr = suffixs.Split(',');
+ foreach (string suffix in suffixArr)
+ {
+ if (suffix.Equals(strExt, StringComparison.InvariantCultureIgnoreCase))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+ }
+
+
+ }
+}
diff --git a/ViewModel/AppConfig.cs b/ViewModel/AppConfig.cs
index da63785..4571668 100644
--- a/ViewModel/AppConfig.cs
+++ b/ViewModel/AppConfig.cs
@@ -7,7 +7,7 @@ namespace GeekDesk.ViewModel
{
[Serializable]
- public class AppConfig : System.ComponentModel.INotifyPropertyChanged
+ public class AppConfig : INotifyPropertyChanged
{
private int menuSortType = (int)SortType.CUSTOM; //菜单排序类型
private int iconSortType = (int)SortType.CUSTOM; //图表排序类型
diff --git a/ViewModel/AppData.cs b/ViewModel/AppData.cs
index 3f76f1a..473e9c9 100644
--- a/ViewModel/AppData.cs
+++ b/ViewModel/AppData.cs
@@ -6,7 +6,7 @@ using System.ComponentModel;
namespace GeekDesk.ViewModel
{
[Serializable]
- class AppData : INotifyPropertyChanged
+ public class AppData : INotifyPropertyChanged
{
private ObservableCollection menuList = new ObservableCollection();
private AppConfig appConfig = new AppConfig();
diff --git a/ViewModel/IconInfo.cs b/ViewModel/IconInfo.cs
index aad1c06..51b7cc0 100644
--- a/ViewModel/IconInfo.cs
+++ b/ViewModel/IconInfo.cs
@@ -1,4 +1,5 @@
using GeekDesk.Constant;
+using GeekDesk.Util;
using System;
using System.ComponentModel;
using System.IO;
@@ -16,8 +17,38 @@ namespace GeekDesk.ViewModel
private BitmapImage bitmapImage; //位图
private byte[] imageByteArr; //图片 base64
private string content; //显示信息
- private int imageWidth = (int)DefaultConstant.IMAGE_WIDTH;
- private int imageHeight = (int)DefaultConstant.IMAGE_HEIGHT;
+ private int imageWidth = (int)DefaultConstant.IMAGE_WIDTH; //图片宽度
+ private int imageHeight = (int)DefaultConstant.IMAGE_HEIGHT; //图片高度
+ private bool adminStartUp = false; //始终管理员方式启动 默认否
+ private byte[] defaultImage;
+
+
+
+ public byte[] DefaultImage
+ {
+ get
+ {
+ return defaultImage;
+ }
+ set
+ {
+ defaultImage = value;
+ OnPropertyChanged("DefaultImage");
+ }
+ }
+
+ public bool AdminStartUp
+ {
+ get
+ {
+ return adminStartUp;
+ }
+ set
+ {
+ adminStartUp = value;
+ OnPropertyChanged("AdminStartUp");
+ }
+ }
public int Count
{
@@ -66,12 +97,12 @@ namespace GeekDesk.ViewModel
get
{
- return ToImage(ImageByteArr);
+ return ImageUtil.ByteArrToImage(ImageByteArr);
}
set
{
bitmapImage = value;
- ImageByteArr = getJPGFromImageControl(bitmapImage);
+ ImageByteArr = ImageUtil.BitmapImageToByte(bitmapImage);
OnPropertyChanged("BitmapImage");
}
}
@@ -140,29 +171,6 @@ namespace GeekDesk.ViewModel
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
- public BitmapImage ToImage(byte[] array)
- {
- using (var ms = new System.IO.MemoryStream(array))
- {
- var image = new BitmapImage();
- image.BeginInit();
- image.CacheOption = BitmapCacheOption.OnLoad; // here
- image.StreamSource = ms;
- image.EndInit();
- return image;
- }
- }
-
- public byte[] getJPGFromImageControl(BitmapImage bi)
- {
- using (MemoryStream memStream = new MemoryStream())
- {
- PngBitmapEncoder encoder = new PngBitmapEncoder();
- encoder.Frames.Add(BitmapFrame.Create(bi));
- encoder.Save(memStream);
- return memStream.GetBuffer();
- }
- }
}
}
\ No newline at end of file
diff --git a/ViewModel/MenuInfo.cs b/ViewModel/MenuInfo.cs
index ad3acf4..80adbcc 100644
--- a/ViewModel/MenuInfo.cs
+++ b/ViewModel/MenuInfo.cs
@@ -11,7 +11,7 @@ namespace GeekDesk.ViewModel
{
[Serializable]
- class MenuInfo : INotifyPropertyChanged
+ public class MenuInfo : INotifyPropertyChanged
{