public Tuple <BitmapImage, Color> LoadAnimationTexture(string fileName, bool transparent = false)
 {
     if (transparent)
     {
         FileStream            fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
         System.Drawing.Bitmap img        = new System.Drawing.Bitmap(fileStream);
         fileStream.Close();
         var    color = img.Palette.Entries[0];
         string hex   = HexConverter(color);
         img.MakeTransparent(color);
         var finalResult = (BitmapImage)Extensions.BitmapConversion.ToWpfBitmap((System.Drawing.Bitmap)img.Clone());
         img.Dispose();
         return(new Tuple <BitmapImage, Color>(finalResult, (Color)ColorConverter.ConvertFromString(hex)));
     }
     else
     {
         FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
         var        img        = new System.Windows.Media.Imaging.BitmapImage();
         img.BeginInit();
         img.StreamSource = fileStream;
         img.CacheOption  = BitmapCacheOption.OnLoad;
         img.EndInit();
         var finalResult = (BitmapImage)img.Clone();
         fileStream.Close();
         return(new Tuple <BitmapImage, Color>(finalResult, Colors.Black));
     }
 }
Пример #2
0
        private void updateImage(object state)
        {
            byte[] buffer = new byte[10000000];

            while(IsAutoGrabbingMode)
            {
                int read, total = 0;
                HttpWebRequest req;
                try
                {
                    req = (HttpWebRequest)WebRequest.Create(Url);
                    // get response
                    WebResponse resp = req.GetResponse();

                    // get response stream
                    Stream stream = resp.GetResponseStream();

                    // read data from stream
                    while ((read = stream.Read(buffer, total, 1000)) != 0)
                    {
                        total += read;
                    }

                    byte[] btRezultBuffer = buffer.Take(total).ToArray();
                    //Console.WriteLine(total);
                    App.ViewModel.CurrentDisp.BeginInvoke((Action) (() =>
                    {
                        OnNewImage(btRezultBuffer);
                        if(bShowIpFrame)
                        {
                            MemoryStream ms = new MemoryStream(btRezultBuffer);
                            BitmapImage bmp = new BitmapImage();
                            bmp.BeginInit();
                            bmp.StreamSource = ms;
                            bmp.EndInit();
                            ImageFrame = bmp.Clone();
                        }
                    }));
                    
                }
                catch (UriFormatException ex)
                {
                    App.Log.Error("Ошибка при вводе URL IP-камеры", ex);
                    if(ErrorCounter++ > 5)
                    {
                        App.ViewModel.AddLogMessage("Ошибка при вводе URL IP-камеры. Опрос IP-камеры остановлен");
                        StopAutoGrabbing();
                    }
                    App.ViewModel.AddLogMessage("Ошибка при вводе URL IP-камеры. Повторный запрос...");

                }
                catch (WebException ex)
                {
                    App.Log.Error("Ошибка при вводе URL IP-камеры", ex);
                    if (ErrorCounter++ > 5)
                    {
                        App.ViewModel.AddLogMessage("Ошибка при вводе URL IP-камеры. Опрос IP-камеры остановлен");
                        StopAutoGrabbing();
                    }
                    App.ViewModel.AddLogMessage("Ошибка при вводе URL IP-камеры. Повторный запрос...");
                }
                catch (Exception ex)
                {
                    App.Log.Error("Неидентифицированная ошибка в UpdateImage", ex);
                    if (ErrorCounter++ > 5)
                    {
                        App.ViewModel.AddLogMessage("Неидентифицированная ошибка в UpdateImage. Опрос IP-камеры остановлен");
                        StopAutoGrabbing();
                    }
                    App.ViewModel.AddLogMessage("Неидентифицированная ошибка в UpdateImage. Повторный запрос...");
                }
                finally
                {
                    Thread.Sleep(AutoGrabbingTime);
                }
            }
           
            
        }
Пример #3
0
 public WPFImageArray(BitmapImage Source, int ItemWidth, int ItemHeight)
 {
     m_CompleteImage = Source.Clone();
     m_CompleteImage.Freeze();
     Load(ItemWidth, ItemHeight);
 }
Пример #4
0
        private static System.Drawing.Bitmap buildImage(Tab tab, List<System.Drawing.Bitmap> images, System.Drawing.Bitmap finalImage, int offset, string key)
        {
            try
            {
                System.Drawing.Font font = new System.Drawing.Font(ApplicationState.FontCollection.Families[0], 11);
                int width = 0;
                int height = 0;
                int count = 0;
                float middleWidth = 0;
                foreach (Stream stream in ApplicationState.Model.GetImage(tab))
                {
                    System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(stream);

                    if (count == 1)
                    {
                        using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(new System.Drawing.Bitmap(200, 200)))
                        {
                            System.Drawing.SizeF measured = g.MeasureString(tab.Name, font);
                            width += (int)measured.Width;
                            middleWidth = measured.Width;
                        }
                    }
                    else
                    {
                        width += bitmap.Width;
                    }
                    height = bitmap.Height > height ? bitmap.Height : height;
                    images.Add(bitmap);
                    count++;
                }

                finalImage = new System.Drawing.Bitmap(width, height);
                using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(finalImage))
                {
                    //set background color
                    g.Clear(System.Drawing.Color.Transparent);

                    //go through each image and draw it on the final image
                    int woffset = 0;
                    count = 0;
                    foreach (System.Drawing.Bitmap image in images)
                    {
                        int iwidth = image.Width;
                        if (count == 1)
                            iwidth = (int)middleWidth;
                        g.DrawImage(image, new System.Drawing.Rectangle(woffset, 0, iwidth, image.Height));
                        woffset += iwidth;
                        if (count == 1)
                            woffset -= 3; //The right image didn't align, similar to forums
                        count++;
                    }

                    g.DrawString(tab.Name, font, System.Drawing.Brushes.Yellow, images[0].Width - 2, 6); //Top
                    g.DrawString(tab.Name, font, System.Drawing.Brushes.Yellow, images[0].Width - 2, 32); //Mouse over version
                }

                using (MemoryStream stream = new MemoryStream())
                {
                    finalImage.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                    stream.Position = 0;
                    var bitmap = new BitmapImage();
                    bitmap.BeginInit();
                    bitmap.StreamSource = stream;
                    bitmap.CacheOption = BitmapCacheOption.OnLoad;
                    bitmap.EndInit();

                    BitmapImage bitmapclone = (BitmapImage)bitmap.Clone();
                    bitmap = null;
                    imageCache.Add(key, new CroppedBitmap(bitmapclone, new Int32Rect(0, offset, (int)bitmapclone.Width, 26)));
                }
            }
            catch (Exception ex)
            {
                if (finalImage != null)
                    finalImage.Dispose();

                throw ex;
            }
            finally
            {
                foreach (System.Drawing.Bitmap image in images)
                    image.Dispose();
            }
            return finalImage;
        }
Пример #5
0
        private void InputButton_Click(object sender, RoutedEventArgs e)
        {
            var openFile = new  System.Windows.Forms.OpenFileDialog();
            openFile.Filter = "image files|*.png;*jpg;*.jpeg;*.tif;*.tiff;;*.bmp;*.tga";
            openFile.Multiselect = true;
            openFile.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
            if(openFile.ShowDialog()==System.Windows.Forms.DialogResult.OK)
            {
                ImageFIles =(string[]) openFile.FileNames.Clone();
                foreach(string singleImageFile in ImageFIles)
                {
                    BitmapImage thumbnail = new BitmapImage(new Uri(singleImageFile,UriKind.Absolute));

                    FileInfo tempFileInfo = new FileInfo(singleImageFile);
                    ImageItem singleImageItem = new ImageItem(thumbnail.Clone(), tempFileInfo.Name, tempFileInfo.DirectoryName,tempFileInfo.FullName, tempFileInfo.Extension);

                    ImageItemList.Add(singleImageItem);
                }
            }
            ImageListViewer.ItemsSource = ImageItemList;
            ImageListViewer.Items.Refresh();
        }
Пример #6
0
        private void btnAddPhoto_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.OpenFileDialog openFileDialog = new System.Windows.Forms.OpenFileDialog();
            openFileDialog.Title = "选择照片";
            openFileDialog.Filter = "jpg文件|*.jpg|bmp文件|*.bmp|gif文件|*.gif|png文件|*.png";
            openFileDialog.FileName = string.Empty;
            openFileDialog.FilterIndex = 1;
            openFileDialog.RestoreDirectory = true;
            openFileDialog.DefaultExt = "jpg";

            System.Windows.Forms.DialogResult dr = openFileDialog.ShowDialog();

            if (dr == System.Windows.Forms.DialogResult.OK)
            {
                try
                {
                    string filename = openFileDialog.FileName;
                    BitmapImage bi = new BitmapImage(new Uri(filename));
                    BitmapImage biBak = bi.Clone();
                    this.imgPhoto.Source = bi;
                    this.imgPhoto.Tag = biBak;
                }
                catch (Exception)
                {
                    return;
                }
            }
        }