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(); }
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; } } }