- Notifications
You must be signed in to change notification settings - Fork 279
CropImage
闫驚鏵(Jinhua Yan) edited this page Jun 15, 2023 · 1 revision
<Grid> <Grid.RowDefinitions> <RowDefinition Height="*" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <wd:CropImage Name="MyCropImage" Grid.Row="0" Grid.Column="0" /> <Image Grid.Column="1" Width="{Binding CurrentRect.Width, ElementName=MyCropImage}" Height="{Binding CurrentRect.Height, ElementName=MyCropImage}" VerticalAlignment="Center" Source="{Binding CurrentAreaBitmap, ElementName=MyCropImage}" Stretch="Uniform" /> <StackPanel Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" Orientation="Horizontal"> <Button Margin="0,20,10,20" Click="OnImportClickHandler" Content="选择图片" Style="{StaticResource WD.PrimaryButton}" /> <Button Margin="0,20,10,20" Click="BtnSave_Click" Content="保存图片" Style="{StaticResource WD.SuccessPrimaryButton}" /> </StackPanel> </Grid> double ConvertBytesToMB(long bytes) { return (double)bytes / (1024 * 1024); } private void OnImportClickHandler(object sender, RoutedEventArgs e) { var openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "图像文件(*.jpg;*.jpeg;*.png;)|*.jpg;*.jpeg;*.png;"; if (openFileDialog.ShowDialog() == true) { var fileInfo = new FileInfo(openFileDialog.FileName); var fileSize = fileInfo.Length; var mb = ConvertBytesToMB(fileSize); if (mb > 1) { WPFDevelopers.Controls.MessageBox.Show("图片不能大于 1M ", "提示", MessageBoxButton.OK, MessageBoxImage.Error); return; } var bitmap = new BitmapImage(); bitmap.BeginInit(); bitmap.CacheOption = BitmapCacheOption.OnLoad; bitmap.UriSource = new Uri(openFileDialog.FileName, UriKind.Absolute); bitmap.EndInit(); if (bitmap.PixelWidth > 500 || bitmap.PixelHeight > 500) { var width = (int)(bitmap.PixelWidth * 0.5); var height = (int)(bitmap.PixelHeight * 0.5); var croppedBitmap = new CroppedBitmap(bitmap, new Int32Rect(0, 0, width, height)); var bitmapNew = new BitmapImage(); bitmapNew.BeginInit(); bitmapNew.DecodePixelWidth = width; bitmapNew.DecodePixelHeight = height; var memoryStream = new MemoryStream(); var encoder = new JpegBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(croppedBitmap.Source)); encoder.Save(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); bitmapNew.StreamSource = memoryStream; bitmapNew.EndInit(); MyCropImage.Source = bitmapNew; } else { MyCropImage.Source = bitmap; } } } private void BtnSave_Click(object sender, RoutedEventArgs e) { var dlg = new SaveFileDialog(); dlg.FileName = $"WPFDevelopers_CropImage_{DateTime.Now.ToString("yyyyMMddHHmmss")}.jpg"; dlg.DefaultExt = ".jpg"; dlg.Filter = "image file|*.jpg"; if (dlg.ShowDialog() == true) { var pngEncoder = new PngBitmapEncoder(); pngEncoder.Frames.Add(BitmapFrame.Create((BitmapSource)MyCropImage.CurrentAreaBitmap)); using (var fs = File.OpenWrite(dlg.FileName)) { pngEncoder.Save(fs); fs.Dispose(); fs.Close(); } } }