Exemple #1
0
        private void OnButtonClick(object sender, RoutedEventArgs e)
        {
            Button button = sender as Button;

            if (button.Name == "PreImageButton")
            {
                currentState = ImagePreviewState.Pre;
            }
            else if (button.Name == "NextImageButton")
            {
                currentState = ImagePreviewState.Next;
            }
            else if (button.Name == "PreTiffButton")
            {
                currentState     = ImagePreviewState.TiffState;
                currentTiffState = ImagePreviewTiffState.TiffPre;
            }
            else if (button.Name == "NextTiffButton")
            {
                currentState     = ImagePreviewState.TiffState;
                currentTiffState = ImagePreviewTiffState.TiffNext;
            }

            Update();
        }
Exemple #2
0
        public void Update()
        {
            while (currentState != ImagePreviewState.Finalize)
            {
                switch (currentState)
                {
                case ImagePreviewState.Init:

                    listCount        = 0;
                    currentListIndex = 0;
                    TiffCount        = 0;
                    currentTiffIndex = 0;

                    if (imagePaths != null)
                    {
                        listCount = imagePaths.Count();

                        if (listCount == 0)
                        {
                            currentState = ImagePreviewState.Unvalid;
                        }
                        else
                        {
                            currentState = ImagePreviewState.Ready;
                        }
                    }
                    else
                    {
                        currentState = ImagePreviewState.Unvalid;
                    }

                    break;

                case ImagePreviewState.Ready:
                    PreImageButton.Visibility  = System.Windows.Visibility.Hidden;
                    NextImageButton.Visibility = System.Windows.Visibility.Hidden;
                    PreTiffButton.Visibility   = System.Windows.Visibility.Hidden;
                    NextTiffButton.Visibility  = System.Windows.Visibility.Hidden;

                    CurrentFileName = System.IO.Path.GetFileName(imagePaths[currentListIndex]);
                    currentFileExt  = System.IO.Path.GetExtension(imagePaths[currentListIndex]).ToLower();

                    ImageView.Visibility    = System.Windows.Visibility.Visible;
                    ImageUnvalid.Visibility = System.Windows.Visibility.Hidden;

                    if (listCount == 1)
                    {
                        currentState = ImagePreviewState.OnePage;
                    }
                    else
                    {
                        if (currentListIndex == 0)
                        {
                            currentState = ImagePreviewState.First;
                        }
                        else if (currentListIndex == listCount - 1)
                        {
                            currentState = ImagePreviewState.Last;
                        }
                        else
                        {
                            currentState = ImagePreviewState.Middle;
                        }
                    }

                    break;

                case ImagePreviewState.First:
                    PreImageButton.Visibility  = System.Windows.Visibility.Hidden;
                    NextImageButton.Visibility = System.Windows.Visibility.Visible;
                    PreTiffButton.Visibility   = System.Windows.Visibility.Hidden;
                    NextTiffButton.Visibility  = System.Windows.Visibility.Hidden;

                    currentState = ImagePreviewState.CheckExt;
                    break;

                case ImagePreviewState.Middle:
                    PreImageButton.Visibility  = System.Windows.Visibility.Visible;
                    NextImageButton.Visibility = System.Windows.Visibility.Visible;
                    PreTiffButton.Visibility   = System.Windows.Visibility.Hidden;
                    NextTiffButton.Visibility  = System.Windows.Visibility.Hidden;

                    currentState = ImagePreviewState.CheckExt;
                    break;

                case ImagePreviewState.Last:
                    PreImageButton.Visibility  = System.Windows.Visibility.Visible;
                    NextImageButton.Visibility = System.Windows.Visibility.Hidden;
                    PreTiffButton.Visibility   = System.Windows.Visibility.Hidden;
                    NextTiffButton.Visibility  = System.Windows.Visibility.Hidden;

                    currentState = ImagePreviewState.CheckExt;
                    break;

                case ImagePreviewState.OnePage:
                    PreImageButton.Visibility  = System.Windows.Visibility.Hidden;
                    NextImageButton.Visibility = System.Windows.Visibility.Hidden;
                    PreTiffButton.Visibility   = System.Windows.Visibility.Hidden;
                    NextTiffButton.Visibility  = System.Windows.Visibility.Hidden;

                    currentState = ImagePreviewState.CheckExt;
                    break;

                case ImagePreviewState.CheckExt:

                    if (currentFileExt == ".tif")
                    {
                        currentTiffIndex = 0;
                        currentState     = ImagePreviewState.TiffState;
                        currentTiffState = ImagePreviewTiffState.TiffReady;
                    }
                    else if (currentFileExt == ".jpg" || currentFileExt == ".bmp" || currentFileExt == ".png")
                    {
                        currentState = ImagePreviewState.Render;
                    }
                    else
                    {
                        currentState = ImagePreviewState.Unvalid;
                    }
                    break;

                case ImagePreviewState.Render:

                    // bool IsFitted = false;
                    if (File.Exists(imagePaths[currentListIndex]))
                    {
                        BitmapSource bitmapSource;
                        if (currentFileExt == ".tif")
                        {
                            if (currentTiffDecoder == null)
                            {
                                currentState = ImagePreviewState.Unvalid;
                                break;
                            }

                            bitmapSource = currentTiffDecoder.Frames[currentTiffIndex];

                            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
                            encoder.Frames.Add(BitmapFrame.Create(bitmapSource));

                            using (MemoryStream ms = new MemoryStream())
                            {
                                encoder.Save(ms);
                                BitmapImage myBitmapImage = new BitmapImage();
                                myBitmapImage.BeginInit();
                                myBitmapImage.StreamSource     = new MemoryStream(ms.ToArray());
                                myBitmapImage.DecodePixelWidth = 400;
                                myBitmapImage.EndInit();

                                bitmapSource = myBitmapImage;
                            }
                        }
                        else
                        {
                            BitmapImage myBitmapImage = new BitmapImage();
                            myBitmapImage.BeginInit();
                            myBitmapImage.UriSource        = new Uri(imagePaths[currentListIndex], UriKind.RelativeOrAbsolute);
                            myBitmapImage.DecodePixelWidth = 400;
                            myBitmapImage.EndInit();

                            bitmapSource = myBitmapImage;
                        }

                        //if (bitmapSource.PixelWidth < this.ActualWidth - 60 && bitmapSource.PixelHeight < this.ActualHeight - 60)
                        //{
                        //    ImageView.Stretch = Stretch.None;
                        //    //IsFitted = true;
                        //}
                        //else
                        //{
                        ImageView.Stretch = Stretch.Uniform;
                        //IsFitted = false;
                        //}

                        FormatConvertedBitmap fcb = new FormatConvertedBitmap(bitmapSource, PixelFormats.Gray8, null, 0);
                        ImageView.Source = fcb;
                        currentState     = ImagePreviewState.Finalize;
                    }
                    else
                    {
                        currentState = ImagePreviewState.Unvalid;
                    }

                    break;

                case ImagePreviewState.Finalize:
                    break;

                case ImagePreviewState.Unvalid:
                    ImageView.Visibility    = System.Windows.Visibility.Hidden;
                    ImageUnvalid.Visibility = System.Windows.Visibility.Visible;
                    currentState            = ImagePreviewState.Finalize;
                    break;

                case ImagePreviewState.Pre:
                    if (currentListIndex > 0)
                    {
                        currentListIndex--;
                    }
                    currentState = ImagePreviewState.Ready;
                    break;

                case ImagePreviewState.Next:
                    if (currentListIndex < listCount - 1)
                    {
                        currentListIndex++;
                    }
                    currentState = ImagePreviewState.Ready;
                    break;

                case ImagePreviewState.TiffState:

                    while (currentState != ImagePreviewState.Render)
                    {
                        switch (currentTiffState)
                        {
                        case ImagePreviewTiffState.TiffReady:
                            PreTiffButton.Visibility  = System.Windows.Visibility.Hidden;
                            NextTiffButton.Visibility = System.Windows.Visibility.Hidden;

                            if (File.Exists(imagePaths[currentListIndex]))
                            {
                                Uri myUri = new Uri(imagePaths[currentListIndex], UriKind.RelativeOrAbsolute);

                                try
                                {
                                    currentTiffDecoder = new TiffBitmapDecoder(myUri, BitmapCreateOptions.None, BitmapCacheOption.None);
                                }
                                catch (Exception)
                                {
                                    currentTiffDecoder = null;
                                    currentState       = ImagePreviewState.Render;
                                    break;
                                }

                                TiffCount = currentTiffDecoder.Frames.Count();

                                if (TiffCount == 1)
                                {
                                    PreTiffButton.Visibility  = System.Windows.Visibility.Hidden;
                                    NextTiffButton.Visibility = System.Windows.Visibility.Hidden;
                                }
                                else
                                {
                                    if (currentTiffIndex == 0)
                                    {
                                        PreTiffButton.Visibility  = System.Windows.Visibility.Hidden;
                                        NextTiffButton.Visibility = System.Windows.Visibility.Visible;
                                    }
                                    else if (currentTiffIndex == TiffCount - 1)
                                    {
                                        PreTiffButton.Visibility  = System.Windows.Visibility.Visible;
                                        NextTiffButton.Visibility = System.Windows.Visibility.Hidden;
                                    }
                                    else
                                    {
                                        PreTiffButton.Visibility  = System.Windows.Visibility.Visible;
                                        NextTiffButton.Visibility = System.Windows.Visibility.Visible;
                                    }
                                }
                            }
                            currentState = ImagePreviewState.Render;
                            break;

                        case ImagePreviewTiffState.TiffPre:
                            if (currentTiffIndex > 0)
                            {
                                currentTiffIndex--;
                            }
                            currentTiffState = ImagePreviewTiffState.TiffReady;
                            break;

                        case ImagePreviewTiffState.TiffNext:
                            if (currentTiffIndex < TiffCount - 1)
                            {
                                currentTiffIndex++;
                            }
                            currentTiffState = ImagePreviewTiffState.TiffReady;
                            break;
                        }
                    }

                    break;
                }
            }
        }