Files
GeekDesk/ViewModel/IconInfo.cs
2021-04-13 15:26:19 +08:00

137 lines
3.3 KiB
C#

using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Media.Imaging;
namespace GeekDesk.ViewModel
{
[Serializable]
public class IconInfo : INotifyPropertyChanged
{
private string path; //路径
private string name; //文件名
private int count = 0; //打开次数
[field: NonSerialized]
private BitmapImage bitmapImage; //位图
private byte[] imageByteArr; //图片 base64
private string content; //显示信息
public int Count
{
get
{
return count;
}
set
{
count = value;
Content = Path + "\n" + Name + "\n使用次数: " + Count;
OnPropertyChanged("Count");
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
Content = Path + "\n" + Name + "\n使用次数: " + Count;
OnPropertyChanged("Name");
}
}
public string Path
{
get
{
return path;
}
set
{
path = value;
Content = Path + "\n" + Name + "\n使用次数: " + Count;
OnPropertyChanged("Path");
}
}
public BitmapImage BitmapImage
{
get
{
return ToImage(ImageByteArr);
}
set
{
bitmapImage = value;
ImageByteArr = getJPGFromImageControl(bitmapImage);
OnPropertyChanged("BitmapImage");
}
}
public byte[] ImageByteArr
{
get
{
return imageByteArr;
}
set
{
imageByteArr = value;
OnPropertyChanged("ImageByteArr");
}
}
public string Content
{
get
{
return content;
}
set
{
content = value;
OnPropertyChanged("Content");
}
}
[field: NonSerializedAttribute()]
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
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();
}
}
}
}