using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Xml.Linq;
namespace BellwetherBackend.Utility
{
public class GlobalFunction
{
//圖片規格
public static string[] imgDimList = { ".jpg", ".png", ".bmp", ".jpeg" };
//影片規格
public static string[] mediaDimList = { ".avi", ".mp4", "mpeg", ".mpg", ".wmv" };
//簡報
public static string[] pptDimList = { ".ppt", ".pptx" };
public static ImageSource GetBitMap(string imgpath)
{
BitmapImage bitmapImg = new BitmapImage();
if (File.Exists(imgpath))
{
bitmapImg.BeginInit();
bitmapImg.UriSource = new Uri(imgpath, UriKind.RelativeOrAbsolute);
//忽略原始圖檔的色盤設定,使用預設值,可縮短載入圖檔的時間
//如有遇到色彩不正確的問題,或者原圖有特殊的自定義色盤,請不要使用此設定
bitmapImg.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
//使用以下的預先載入設定,在BitmapImage創建完成之後,可立刻釋放其所占用或鎖住的資源,以免咬住檔案
bitmapImg.CacheOption = BitmapCacheOption.OnLoad;
//根據欲顯示的區域長或寬,來設定 DecodePixelHeight 或 DecodePixelWidth 的值
//bitmapImg.DecodePixelHeight = THUMB_HEIGHT;
//bitmapImg.DecodePixelWidth = THUMB_WIDTH;
bitmapImg.EndInit();
bitmapImg.Freeze();
}
return bitmapImg;
}
public static ImageSource GetBitMap(string imgpath, double resolutionWidth, double resolutionHeight)
{
BitmapImage bitmapImg = new BitmapImage();
if (File.Exists(imgpath))
{
bitmapImg.BeginInit();
bitmapImg.UriSource = new Uri(imgpath, UriKind.RelativeOrAbsolute);
//忽略原始圖檔的色盤設定,使用預設值,可縮短載入圖檔的時間
//如有遇到色彩不正確的問題,或者原圖有特殊的自定義色盤,請不要使用此設定
bitmapImg.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
//使用以下的預先載入設定,在BitmapImage創建完成之後,可立刻釋放其所占用或鎖住的資源,以免咬住檔案
bitmapImg.CacheOption = BitmapCacheOption.OnLoad;
//根據欲顯示的區域長或寬,來設定 DecodePixelHeight 或 DecodePixelWidth 的值
BitmapDecoder decoder = BitmapDecoder.Create(new Uri(imgpath), BitmapCreateOptions.None, BitmapCacheOption.None);
BitmapFrame frame = decoder.Frames[0];
//ShellFile shellFile = ShellFile.FromFilePath(imgpath);
var imageSourceHeight = frame.PixelHeight; //shellFile.Properties.System.Image.VerticalSize.Value;
var imageSourceWidth = frame.PixelWidth;//shellFile.Properties.System.Image.HorizontalSize.Value;
var imageSourceRatio = imageSourceWidth / (imageSourceHeight == 0 ? 1 : imageSourceHeight);
if (imageSourceHeight > resolutionHeight && imageSourceWidth > resolutionWidth)
{
if (imageSourceRatio > resolutionWidth / resolutionHeight)
{
bitmapImg.DecodePixelWidth = Convert.ToInt32(resolutionWidth);
}
else
{
bitmapImg.DecodePixelHeight = Convert.ToInt32(resolutionHeight);
}
}
else if (imageSourceHeight > resolutionHeight)
{
bitmapImg.DecodePixelHeight = Convert.ToInt32(resolutionHeight);
}
else if (imageSourceWidth > resolutionWidth)
{
bitmapImg.DecodePixelWidth = Convert.ToInt32(resolutionWidth);
}
bitmapImg.EndInit();
bitmapImg.Freeze();
}
return bitmapImg;
}
public static bool CheckFileIsImage(string file)
{
if (GlobalFunction.imgDimList.Contains(System.IO.Path.GetExtension(file.ToLower())))
{
return true;
}
return false;
}
public static bool CheckFileIsVideo(string file)
{
if (GlobalFunction.mediaDimList.Contains(System.IO.Path.GetExtension(file.ToLower())))
{
return true;
}
return false;
}
public static string GetFolderFileName(string rootPath, string filename)
{
string result = "";
Random Counter = new Random(Guid.NewGuid().GetHashCode());
do
{
result = (Counter.Next(0, 10000)).ToString() + System.IO.Path.GetExtension(filename).ToLower();
}
while (File.Exists(Path.Combine(rootPath, result)));
return result;
}
#region icon
public static Geometry AddBtnData;
public static Geometry DeleteBtnData;
public static Geometry MoveUpBtnData;
public static Geometry MoveDownBtnData;
public static Geometry MapBtnData;
public static Geometry ImgDeleteData;
public static Geometry ConnectBtnData;
public static Geometry DisconnectBtnData;
public static Geometry UpdateBtnData;
public GlobalFunction()
{
LoadAllIconData();
//FillBaseFileSystem();
}
private Geometry LoadIconDataFromResource(string xamlName)
{
Geometry iconData = null;
var assembly = GetType().Assembly;
using (var stream = assembly.GetManifestResourceStream(xamlName))
{
var doc = XDocument.Load(stream);
var path = doc.Root.Element("{http://schemas.microsoft.com/winfx/2006/xaml/presentation}Path");
if (path != null)
{
var data = (string)path.Attribute("Data");
iconData = PathGeometry.Parse(data);
}
return iconData;
}
}
private void LoadAllIconData()
{
AddBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.add.xaml");
DeleteBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.delete.xaml");
MoveUpBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.upward.xaml");
MoveDownBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.downward.xaml");
MapBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.map.xaml");
ImgDeleteData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.imgdelete.xaml");
ConnectBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.connect.xaml");
DisconnectBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.disconnect.xaml");
UpdateBtnData = LoadIconDataFromResource("BellwetherBackend.Assets.appbar.control.update.xaml");
}
#endregion
}
public class ScrollViewerUtilities
{
#region HorizontalOffset
///
/// HorizontalOffset Attached Dependency Property
///
public static readonly DependencyProperty HorizontalOffsetProperty =
DependencyProperty.RegisterAttached("HorizontalOffset", typeof(double), typeof(ScrollViewerUtilities),
new FrameworkPropertyMetadata((double)0.0,
new PropertyChangedCallback(OnHorizontalOffsetChanged)));
///
/// Gets the HorizontalOffset property. This dependency property
/// indicates ....
///
public static double GetHorizontalOffset(DependencyObject d)
{
return (double)d.GetValue(HorizontalOffsetProperty);
}
///
/// Sets the HorizontalOffset property. This dependency property
/// indicates ....
///
public static void SetHorizontalOffset(DependencyObject d, double value)
{
d.SetValue(HorizontalOffsetProperty, value);
}
///
/// Handles changes to the HorizontalOffset property.
///
private static void OnHorizontalOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var viewer = (ScrollViewer)d;
viewer.ScrollToHorizontalOffset((double)e.NewValue);
}
#endregion
#region VerticalOffset
///
/// VerticalOffset Attached Dependency Property
///
public static readonly DependencyProperty VerticalOffsetProperty =
DependencyProperty.RegisterAttached("VerticalOffset", typeof(double), typeof(ScrollViewerUtilities),
new FrameworkPropertyMetadata((double)0.0,
new PropertyChangedCallback(OnVerticalOffsetChanged)));
///
/// Gets the VerticalOffset property. This dependency property
/// indicates ....
///
public static double GetVerticalOffset(DependencyObject d)
{
return (double)d.GetValue(VerticalOffsetProperty);
}
///
/// Sets the VerticalOffset property. This dependency property
/// indicates ....
///
public static void SetVerticalOffset(DependencyObject d, double value)
{
d.SetValue(VerticalOffsetProperty, value);
}
///
/// Handles changes to the VerticalOffset property.
///
private static void OnVerticalOffsetChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var viewer = (ScrollViewer)d;
viewer.ScrollToVerticalOffset((double)e.NewValue);
}
#endregion
}
}