| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | using System.Diagnostics;using System.Drawing;using System.IO;using System.Linq;using System.Windows;using System.Windows.Controls;using InABox.WPF;using Microsoft.Win32;using Color = System.Windows.Media.Color;using Image = System.Drawing.Image;namespace InABox.DynamicGrid{    public class EmbeddedImageEditorControl : DynamicEditorControl<byte[]>    {        private byte[] data;        private Button Select;        public EmbeddedImageEditorControl()        {            MaximumHeight = int.MaxValue;            MaximumWidth = int.MaxValue;            MaximumFileSize = int.MaxValue;        }        public int MaximumHeight { get; set; }        public int MaximumWidth { get; set; }        public int MaximumFileSize { get; set; }        protected override FrameworkElement CreateEditor()        {            var grid = new Grid();            grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) });            grid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(30, GridUnitType.Pixel) });            Select = new Button            {                Content = "Select",                HorizontalAlignment = HorizontalAlignment.Stretch,                VerticalAlignment = VerticalAlignment.Stretch,                VerticalContentAlignment = VerticalAlignment.Center            };            Select.SetValue(Grid.ColumnProperty, 0);            Select.Click += Select_Click;            grid.Children.Add(Select);            var View = new Button            {                Content = "..",                HorizontalAlignment = HorizontalAlignment.Stretch,                VerticalAlignment = VerticalAlignment.Stretch,                VerticalContentAlignment = VerticalAlignment.Center,                Margin = new Thickness(5, 0, 0, 0)            };            View.SetValue(Grid.ColumnProperty, 1);            View.Click += View_Click;            grid.Children.Add(View);            return grid;        }        private void Select_Click(object sender, RoutedEventArgs e)        {            var dlg = new OpenFileDialog();            dlg.Filter = "Image Files (*.jpg;*.png;*.bmp;*.gif)|*.png;*.jpg;*.jpeg;*.bmp;*.gif";            if (dlg.ShowDialog() == true)            {                if (new FileInfo(dlg.FileName).Length > 32000)                    MessageBox.Show("File must be less than 32kb");                var image = Image.FromFile(dlg.FileName);                var size = image.Size.Adjust(MaximumWidth, MaximumHeight);                image = new Bitmap(image, size);                data = (byte[])new ImageConverter().ConvertTo(image, typeof(byte[]));                CheckChanged();            }            ;        }        private void View_Click(object sender, RoutedEventArgs e)        {            if (data == null || !data.Any())                return;            var type = ImageUtils.GetImageType(data);            var file = Path.ChangeExtension(Path.GetTempFileName(), type.ToString());            File.WriteAllBytes(file, data);            var gsProcessInfo = new ProcessStartInfo();            gsProcessInfo.Verb = "open";            gsProcessInfo.WindowStyle = ProcessWindowStyle.Normal;            gsProcessInfo.FileName = file;            gsProcessInfo.UseShellExecute = true;            Process.Start(gsProcessInfo);        }        public override int DesiredHeight()        {            return 25;        }        public override int DesiredWidth()        {            return 150;        }        protected override byte[] RetrieveValue()        {            return data;        }        protected override void UpdateValue(byte[] value)        {            data = value;        }        public override void SetFocus()        {            Select.Focus();        }        public override void SetColor(Color color)        {        }    }}
 |