private void Button_Save_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("確定完成旋轉並儲存?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Information) == MessageBoxResult.OK)
            {
                try
                {
                    double ratio = heightRatio == 0 ? widthRatio : heightRatio;

                    double oriWidth  = rect2WAndH[0] / ratio;
                    double oriHeight = rect2WAndH[1] / ratio;

                    BitmapImage saveBitmapImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);

                    double sourceCenX = saveBitmapImage.PixelWidth / 2;
                    double sourceCenY = saveBitmapImage.PixelHeight / 2;

                    double oriStartX = sourceCenX - (oriWidth / 2);
                    double oriStartY = sourceCenY - (oriHeight / 2);

                    RotateAndSaveImage(saveBitmapImage, rotateAngle, (int)oriStartX, (int)oriStartY, (int)oriWidth, (int)oriHeight, ImageInfo.Image_FullPath);

                    //儲存完馬上重載修改後的圖片
                    ImageInfo.BitmapImage = new CreateBitmapImage().BitmapImageShow(ImageInfo.Image_FullPath, 800);
                    MessageBox.Show("儲存成功", "提示", MessageBoxButton.OK);

                    Cvs.Children.Clear();
                    SetImageDefault(ImageInfo);
                }
                catch (Exception ex)
                {
                    ErrorLog.ErrorMessageOutput(ex.ToString());
                }
            }
        }
Пример #2
0
        private void SaveImage(Transform transform)
        {
            //載入原圖至BitmapSource
            BitmapSource bitmapSource = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);

            bitmapSource = new TransformedBitmap(bitmapSource, transform);
            ImageHelper.SaveUsingEncoder(bitmapSource, ImageInfo.Image_FullPath, ImageInfo.Image_Extension);

            ImageInfo.BitmapImage = new CreateBitmapImage().BitmapImageShow(ImageInfo.Image_FullPath, 800);
            //image.Source = bitmapSource;
            bitmapSource = null;
            ImageInfo    = imageInfo;
        }
Пример #3
0
        //編輯
        public PatientSettingViewModel(string windowType, Agencys agencys, Patients patients)
        {
            WindowType = windowType;
            Patients   = patients;

            //設定病患資料
            //載入設定就好,避免多設定
            Patient_Number   = patients.Patient_Number;
            Patient_Name     = patients.Patient_Name;
            Patient_IDNumber = patients.Patient_IDNumber;
            Patient_Gender   = patients.Patient_Gender;
            Patient_Birth    = patients.Patient_Birth;
            if (PathCheck.IsFileExist(agencys.Agency_ImagePath + patients.Patient_Photo))
            {
                Patient_Photo = new CreateBitmapImage().BitmapImageShow(agencys.Agency_ImagePath + patients.Patient_Photo, 400);
            }
            Patient_FirstRegistrationDate = patients.Patient_FirstRegistrationDate == null ? DateTime.Now : (DateTime)patients.Patient_FirstRegistrationDate;
            DateTime lastRegistrationDate = new TableRegistrations().QueryLastRegistrationDate(patients);

            Patient_LastRegistrationDate = lastRegistrationDate == null?Patient_FirstRegistrationDate.ToString("yyyy/MM/dd") : lastRegistrationDate.ToString("yyyy/MM/dd");

            PatientCategoryInfo = new TablePatientCategorys().QueryPatientPatientCategoryInfo(Patients).ToList().FindAll(s => s.IsChecked == true);
        }
        bool isSkip = true;  //ProgressDialogIndeterminate 回傳值 略過

        private void Button_AutoImport_Click(object sender, RoutedEventArgs e)
        {
            if (btnAutoImport.IsChecked == true)
            {
                if (PathCheck.IsPathExist(Agencys.Agency_ImagePath) && PathCheck.IsPathExist(Agencys.Agency_WifiCardPath))
                {
                    bool isEverChanged = false;

                    ProgressDialogIndeterminate progressDialogIndeterminate = new ProgressDialogIndeterminate();

                    progressDialogIndeterminate.Dispatcher.Invoke(() =>
                    {
                        progressDialogIndeterminate.PText                = "圖片偵測中";
                        progressDialogIndeterminate.PIsIndeterminate     = true;
                        progressDialogIndeterminate.ButtonContent        = "跳過";
                        progressDialogIndeterminate.ReturnValueCallback += new ProgressDialogIndeterminate.ReturnValueDelegate(SetReturnValueCallbackFun);
                        progressDialogIndeterminate.Show();
                    });

                    Registrations registrations = new Registrations();

                    Task t = Task.Factory.StartNew(() =>
                    {
                        using (var ide = new iDentalEntities())
                        {
                            CreateBitmapImage createBitmapImage = new CreateBitmapImage();

                            ObservableCollection <Templates_Images> Templates_ImagesCollect = tableTemplates_Images.QueryTemplatesImagesImportDateAndReturnFullImagePath(Agencys, Patients, SelectedTemplate, functionTemplateViewModel.SelectedDate);

                            //default Image[i] in UserControl Templates
                            int Imagei = 0;
                            //載入樣板設定
                            int ImageCount       = (int)SelectedTemplate.Template_ImageCount;
                            int DecodePixelWidth = (int)SelectedTemplate.Template_DecodePixelWidth;
                            while (Imagei < ImageCount)
                            {
                                progressDialogIndeterminate.Dispatcher.Invoke(() =>
                                {
                                    progressDialogIndeterminate.PText = "圖片 " + (Imagei + 1) + " 偵測中";
                                });

                                //目前處理的Image[i]
                                Image iTarget;

                                TemplateContent.Dispatcher.Invoke(() =>
                                {
                                    iTarget = new Image();
                                    iTarget = (Image)TemplateContent.FindName("Image" + Imagei);

                                    //更換目標圖
                                    //iTarget.Source = new BitmapImage(new Uri(@"/DigiDental;component/Resource/yes.png", UriKind.RelativeOrAbsolute));
                                });

                                //set the paramater default
                                bool isChanged = false;
                                bool detecting = true;
                                while (true)
                                {
                                    //開始偵測wifi card路徑
                                    foreach (string f in Directory.GetFiles(Agencys.Agency_WifiCardPath))
                                    {
                                        Thread.Sleep(1000);

                                        //設定病患資料夾
                                        PatientImageFolderInfo patientImageFolderInfo = PatientFolderSetting.PatientImageFolderSetting(Agencys, Patients.Patient_ID, RegistrationDate);
                                        //檢查是否存在,不存在就新增
                                        PathCheck.CheckPathAndCreate(patientImageFolderInfo.PatientImageFullPath);

                                        string extension     = Path.GetExtension(f).ToUpper();
                                        string newFileName   = DateTime.Now.ToString("yyyyMMddHHmmssffff");
                                        string imageFileName = newFileName + extension;

                                        //判斷圖片是否為正
                                        //不是,旋轉後儲存
                                        //是,直接File.Copy
                                        ImageHelper.RotateImageByExifOrientationData(f, patientImageFolderInfo.PatientImageFullPath + @"\" + newFileName + extension, extension, true);

                                        var queryRegistrations = from r in ide.Registrations
                                                                 where r.Patient_ID == Patients.Patient_ID && r.Registration_Date == RegistrationDate.Date
                                                                 select r;
                                        if (queryRegistrations.Count() > 0)
                                        {
                                            registrations = queryRegistrations.First();
                                        }
                                        else
                                        {
                                            registrations.Patient_ID        = Patients.Patient_ID;
                                            registrations.Registration_Date = RegistrationDate.Date;
                                            ide.Registrations.Add(registrations);
                                            //寫入Registrations
                                            ide.SaveChanges();
                                        }

                                        Images images = new Images()
                                        {
                                            Image_Path      = patientImageFolderInfo.PatientImagePath + @"\" + imageFileName,
                                            Image_FileName  = imageFileName,
                                            Image_Extension = extension
                                        };

                                        registrations.Images.Add(images);
                                        ide.SaveChanges();

                                        //複製完如果刪除發生問題
                                        //嘗試五次每次間隔3秒
                                        int deleteTime = 0;
                                        while (deleteTime < 5)
                                        {
                                            Thread.Sleep(3000);
                                            try
                                            {
                                                File.Delete(f);
                                                deleteTime = 5;
                                            }
                                            catch (Exception ex)
                                            {
                                                deleteTime++;
                                                if (deleteTime == 5)
                                                {
                                                    if (MessageBox.Show("影像搬移中出現問題", "錯誤", MessageBoxButton.OK, MessageBoxImage.Error) == MessageBoxResult.OK)
                                                    {
                                                        isStop = true;
                                                        ErrorLog.ErrorMessageOutput(ex.ToString());
                                                    }
                                                }
                                            }
                                        }

                                        TemplateContent.Dispatcher.Invoke(() =>
                                        {
                                            //INSERT TemplateImages
                                            //寫入資料庫再帶回畫面
                                            string ImageUID = string.Empty;
                                            ImageUID        = tableTemplates_Images.InsertOrUpdateTemplatesImages(Patients, functionTemplateViewModel.SelectedTemplate, functionTemplateViewModel.SelectedDate, images.Image_ID, images.Image_Path, Imagei.ToString());

                                            iTarget        = new Image();
                                            iTarget        = (Image)TemplateContent.FindName("Image" + Imagei);
                                            iTarget.Uid    = ImageUID;
                                            iTarget.Source = createBitmapImage.BitmapImageShow(patientImageFolderInfo.PatientImageFullPath + @"\" + imageFileName, DecodePixelWidth);
                                            isChanged      = true;
                                        });

                                        isEverChanged = true;
                                        //代表以處理完結束這回合的偵測
                                        detecting = false;
                                    }
                                    //ProcessingDialog STOP
                                    //停止
                                    if (isStop)
                                    {
                                        isStop = false;
                                        TemplateContent.Dispatcher.Invoke(() =>
                                        {
                                            iTarget          = new Image();
                                            iTarget          = (Image)TemplateContent.FindName("Image" + Imagei);
                                            var findOriImage = from tc in Templates_ImagesCollect
                                                               where tc.Template_Image_Number == Imagei.ToString()
                                                               select tc;
                                            if (findOriImage.Count() > 0)
                                            {
                                                iTarget.Source = createBitmapImage.BitmapImageShow(findOriImage.First().Image_Path, DecodePixelWidth);
                                            }
                                            else
                                            {
                                                //iTarget.Source = new BitmapImage(new Uri(@"/DigiDental;component/Resource/no.png", UriKind.RelativeOrAbsolute));
                                            }
                                        });
                                        return;
                                    }
                                    else
                                    {
                                        // import pic OR skip import (NEXT)
                                        // 匯入之後接下一張,或是按了跳過
                                        if (!detecting || !isSkip)
                                        {
                                            if (!isChanged)
                                            {
                                                TemplateContent.Dispatcher.Invoke(() =>
                                                {
                                                    iTarget          = new Image();
                                                    iTarget          = (Image)TemplateContent.FindName("Image" + Imagei);
                                                    var findOriImage = from tc in Templates_ImagesCollect
                                                                       where tc.Template_Image_Number == Imagei.ToString()
                                                                       select tc;
                                                    if (findOriImage.Count() > 0)
                                                    {
                                                        iTarget.Source = createBitmapImage.BitmapImageShow(findOriImage.First().Image_Path, DecodePixelWidth);
                                                    }
                                                    else
                                                    {
                                                        //iTarget.Source = new BitmapImage(new Uri(@"/DigiDental;component/Resource/no.png", UriKind.RelativeOrAbsolute));
                                                    }
                                                });
                                            }
                                            Imagei++;
                                            isSkip = true;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }).ContinueWith(cw =>
                    {
                        //結束
                        progressDialogIndeterminate.Dispatcher.Invoke(() =>
                        {
                            progressDialogIndeterminate.PText = "處理完畢";
                            progressDialogIndeterminate.Close();
                        });

                        //委派回傳MainWindow
                        //刷新Registrations 資料
                        //刷新Images 資料
                        if (isEverChanged)
                        {
                            ReturnValueCallback(registrations.Registration_Date);
                        }

                        GC.Collect();

                        btnAutoImport.IsChecked = false;
                    }, TaskScheduler.FromCurrentSynchronizationContext());
                }
                else
                {
                    MessageBox.Show("影像路徑或Wifi Card路徑有問題,請至<設定>檢查是否有誤", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
        }
Пример #5
0
        private void Button_Save_Click(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("確定完成修改並儲存?", "提示", MessageBoxButton.OKCancel, MessageBoxImage.Information) == MessageBoxResult.OK)
            {
                try
                {
                    WaitingDialog waitingDialog = new WaitingDialog();
                    Thread        thread        = new Thread(() =>
                    {
                        waitingDialog         = new WaitingDialog();
                        waitingDialog.WText   = "請稍後";
                        waitingDialog.WDetail = "影像儲存中...";
                        waitingDialog.Show();

                        System.Windows.Threading.Dispatcher.Run();
                    });
                    thread.SetApartmentState(ApartmentState.STA);
                    thread.IsBackground = true;
                    thread.Start();

                    BitmapImage saveBitmapImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);

                    double pw = saveBitmapImage.PixelWidth;
                    double ph = saveBitmapImage.PixelHeight;

                    double rw = rectangle.Width;
                    double rh = rectangle.Height;

                    double bw = border.Width;
                    double bh = border.Height;

                    //image 控制項P1
                    Point sourceP1 = new Point(Canvas.GetLeft(rectangle) - Canvas.GetLeft(border), Canvas.GetTop(rectangle) - Canvas.GetTop(border));

                    //原始圖片比例的rectangle
                    double oriWidth  = pw * (rw / bw);
                    double oriHeight = ph * (rh / bh);

                    //比例
                    double rectangleRatioX = sourceP1.X / bw;
                    double rectangleRatioY = sourceP1.Y / bh;
                    //原始圖片的P1
                    Point oriStartPoint = new Point(pw * rectangleRatioX, ph * rectangleRatioY);

                    DealNewImage(saveBitmapImage, rotateAngle, (int)oriStartPoint.X, (int)oriStartPoint.Y, (int)oriWidth, (int)oriHeight, ImageInfo.Image_FullPath);

                    waitingDialog.Dispatcher.BeginInvoke(new Action(() => {
                        System.Windows.Threading.Dispatcher.CurrentDispatcher.InvokeShutdown();
                        waitingDialog.Close();
                    }));
                    thread.Abort();

                    //儲存完馬上重載修改後的圖片
                    ImageInfo.BitmapImage = new CreateBitmapImage().BitmapImageShow(ImageInfo.Image_FullPath, 800);

                    MessageBox.Show("儲存成功", "提示", MessageBoxButton.OK);

                    SetImageDefault(ImageInfo.Image_FullPath);

                    GC.Collect();
                }
                catch (Exception ex)
                {
                    ErrorLog.ErrorMessageOutput(ex.ToString());
                }
            }
        }
Пример #6
0
        /// <summary>
        /// 處理變動後的Image
        /// </summary>
        /// <param name="sourceImage">圖片來源</param>
        /// <param name="angle">旋轉角度</param>
        /// <param name="startX">裁切起始點X</param>
        /// <param name="startY">裁切起始點Y</param>
        /// <param name="width">裁切寬</param>
        /// <param name="height">裁切高</param>
        /// <param name="filePath">圖片路徑</param>
        public void DealNewImage(BitmapImage sourceImage, double angle,
                                 int startX, int startY, int width, int height,
                                 string filePath)
        {
            try
            {
                bool isEditRotate = sliderRotate.Value != defaultRotateAngle ? true : false;
                bool isEditWidth  = border.Width != rectangle.Width ? true : false;
                bool isEditHeight = border.Height != rectangle.Height ? true : false;

                bool isEditBrightness = sliderBrightness.Value != defaultBrightness ? true : false;
                bool isEditContrast   = sliderContrast.Value != defaultConstrast ? true : false;
                ContrastAdjustEffect effectBrightnessContrast = (ContrastAdjustEffect)filterBrightnessContrast.Effect;

                bool          isEditSharpen = sliderSharpen.Value != defaultSharpen ? true : false;
                SharpenEffect effectSharpen = (SharpenEffect)filterSharpen.Effect;

                bool isEditDefog    = sliderDefog.Value != defaultDefog ? true : false;
                bool isEditExposure = sliderExposure.Value != defaultExposure ? true : false;
                bool isEditGamma    = sliderGamma.Value != defaultGamma ? true : false;
                ToneMappingEffect effectExposureGamma = (ToneMappingEffect)filterExposureGamma.Effect;

                bool            isEditGrayScale = (bool)checkboxGrayScale.IsChecked ? true : false;
                GrayScaleEffect effectGrayScale = (GrayScaleEffect)filterGrayScale.Effect;

                bool isEditInvertColor = (bool)checkboxInvertColor.IsChecked ? true : false;
                InvertColorEffect effectInvertColor = (InvertColorEffect)filterInvertColor.Effect;

                if (isEditRotate || isEditWidth || isEditWidth)
                {
                    TransformGroup  transformGroup  = new TransformGroup();
                    RotateTransform rotateTransform = new RotateTransform(angle);
                    rotateTransform.CenterX = sourceImage.PixelWidth / 2.0;
                    rotateTransform.CenterY = sourceImage.PixelHeight / 2.0;
                    transformGroup.Children.Add(rotateTransform);
                    TranslateTransform translateTransform = new TranslateTransform();
                    translateTransform.X = -startX;
                    translateTransform.Y = -startY;
                    transformGroup.Children.Add(translateTransform);

                    DrawingVisual vis = new DrawingVisual();

                    RenderTargetBitmap rtb;

                    using (DrawingContext cont = vis.RenderOpen())
                    {
                        cont.PushTransform(transformGroup);
                        cont.DrawImage(sourceImage, new Rect(new Size(sourceImage.PixelWidth, sourceImage.PixelHeight)));
                        cont.Close();
                        rtb = new RenderTargetBitmap(width, height, 96d, 96d, PixelFormats.Default);
                        SaveNewImage(rtb, vis, filePath);

                        sourceImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);
                    }
                }

                if (isEditBrightness || isEditContrast)
                {
                    DrawingVisual vis = new DrawingVisual();

                    RenderTargetBitmap rtb = new RenderTargetBitmap(sourceImage.PixelWidth, sourceImage.PixelHeight, 96d, 96d, PixelFormats.Default);;

                    using (DrawingContext cont = vis.RenderOpen())
                    {
                        cont.DrawImage(sourceImage, new Rect(new Size(sourceImage.PixelWidth, sourceImage.PixelHeight)));
                        cont.Close();

                        vis.Effect = effectBrightnessContrast;

                        SaveNewImage(rtb, vis, filePath);

                        sourceImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);
                    }
                }

                if (isEditSharpen)
                {
                    DrawingVisual vis = new DrawingVisual();

                    RenderTargetBitmap rtb = new RenderTargetBitmap(sourceImage.PixelWidth, sourceImage.PixelHeight, 96d, 96d, PixelFormats.Default);;

                    using (DrawingContext cont = vis.RenderOpen())
                    {
                        cont.DrawImage(sourceImage, new Rect(new Size(sourceImage.PixelWidth, sourceImage.PixelHeight)));
                        cont.Close();

                        vis.Effect = effectSharpen;

                        SaveNewImage(rtb, vis, filePath);

                        sourceImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);
                    }
                }

                if (isEditDefog || isEditExposure || isEditGamma)
                {
                    DrawingVisual vis = new DrawingVisual();

                    RenderTargetBitmap rtb = new RenderTargetBitmap(sourceImage.PixelWidth, sourceImage.PixelHeight, 96d, 96d, PixelFormats.Default);;

                    using (DrawingContext cont = vis.RenderOpen())
                    {
                        cont.DrawImage(sourceImage, new Rect(new Size(sourceImage.PixelWidth, sourceImage.PixelHeight)));
                        cont.Close();

                        vis.Effect = effectExposureGamma;

                        SaveNewImage(rtb, vis, filePath);

                        sourceImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);
                    }
                }

                if (isEditGrayScale)
                {
                    DrawingVisual vis = new DrawingVisual();

                    RenderTargetBitmap rtb = new RenderTargetBitmap(sourceImage.PixelWidth, sourceImage.PixelHeight, 96d, 96d, PixelFormats.Default);;

                    using (DrawingContext cont = vis.RenderOpen())
                    {
                        cont.DrawImage(sourceImage, new Rect(new Size(sourceImage.PixelWidth, sourceImage.PixelHeight)));
                        cont.Close();

                        vis.Effect = effectGrayScale;

                        SaveNewImage(rtb, vis, filePath);

                        sourceImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);
                    }
                }

                if (isEditInvertColor)
                {
                    DrawingVisual vis = new DrawingVisual();

                    RenderTargetBitmap rtb = new RenderTargetBitmap(sourceImage.PixelWidth, sourceImage.PixelHeight, 96d, 96d, PixelFormats.Default);;

                    using (DrawingContext cont = vis.RenderOpen())
                    {
                        cont.DrawImage(sourceImage, new Rect(new Size(sourceImage.PixelWidth, sourceImage.PixelHeight)));
                        cont.Close();

                        vis.Effect = effectInvertColor;

                        SaveNewImage(rtb, vis, filePath);

                        sourceImage = new CreateBitmapImage().BitmapImageOriginal(ImageInfo.Image_FullPath);
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorLog.ErrorMessageOutput(ex.ToString());
            }
        }