Как преобразовать croppedbitmap в bitmapimage в WPF VB
пожалуйста помочь..
Заранее спасибо.
Что я уже пробовал:
я не знаю, как преобразовать CroppedBitmap в BitmapImage
Если вы посмотрите на ответ на предыдущий вопрос, который вы задали: Как обрезать изображение в WPF VB[^], вы бы видели эту строку:
var img = image1.Source as BitmapSource;
image2.Source = new CroppedBitmap(inputImage, rcFrom);
Цитата:В следующем примере создается изображение, использующее в качестве источника CroppedBitmap.
BitmapSource
тип, который имеет больше информации, которую вы просите в вопросе выше: Класс BitmapSource - документация Microsoft[^] с примерами.CroppedBitmap.Source
возвращает BitmapSource
введите), и используя решение вашего предыдущего вопроса, а также поиск google & используя найденную статью в C# - объект bitmapsource в объект bitmapimage - переполнение стека[^], ответ был бы там, если бы вы немного поработали, как я только что сделал.private void Go_Click(object sender, RoutedEventArgs e) { if (image1.Source != null) { var rect1 = new Rect() { X = Canvas.GetLeft(selectionRectangle), Y = Canvas.GetTop(selectionRectangle), Width = selectionRectangle.Width, Height = selectionRectangle.Height }; // calc scale in PIXEls for CroppedBitmap... var img = image1.Source as BitmapSource; var scaleWidth = (img.PixelWidth) / (image1.ActualWidth); var scaleHeight = (img.PixelHeight) / (image1.ActualHeight); var rcFrom = new Int32Rect() { X = (int)(rect1.X * scaleWidth), Y = (int)(rect1.Y * scaleHeight), Width = (int)(rect1.Width * scaleWidth), Height = (int)(rect1.Height * scaleHeight) }; var cropped = new CroppedBitmap(inputImage, rcFrom); // UPDATE HERE: CroppedBitmap to BitmapImage croppedImage = GetJpgImage(cropped.Source); // or // croppedImage = GetPngImage(cropped.Source); // using BitmapImage version to prove its created successfully image2.Source = croppedImage; //cropped; } } private BitmapImage croppedImage; private BitmapImage GetJpgImage(BitmapSource source) { return GetImage(source, new JpegBitmapEncoder()); } private BitmapImage GetPngImage(BitmapSource source) { return GetImage(source, new PngBitmapEncoder()); } private BitmapImage GetImage(BitmapSource source, BitmapEncoder encoder) { var bmpImage = new BitmapImage(); using (var srcMS = new MemoryStream()) { encoder.Frames.Add(BitmapFrame.Create(source)); encoder.Save(srcMS); srcMS.Position = 0; using (var destMS = new MemoryStream(srcMS.ToArray())) { bmpImage.BeginInit(); bmpImage.StreamSource = destMS; bmpImage.CacheOption = BitmapCacheOption.OnLoad; bmpImage.EndInit(); bmpImage.Freeze(); } } return bmpImage; }
private void Save_Click(object sender, RoutedEventArgs e) { // save to current working directory SaveJpgImage(croppedImage, @".\cropped.jpg"); } private void SaveJpgImage(BitmapImage source, string photoLocation) { SaveImage(source, photoLocation, new JpegBitmapEncoder()); } private void SavePngImage(BitmapImage source, string photoLocation) { SaveImage(source, photoLocation, new PngBitmapEncoder()); } private void SaveImage(BitmapImage source, string photoLocation, BitmapEncoder encoder) { encoder.Frames.Add(BitmapFrame.Create(source)); using (var filestream = new FileStream(photoLocation, FileMode.Create)) encoder.Save(filestream); }
Imports System.IO Class MainWindow Private isDragging As Boolean Private anchorPoint As New Point() Public Sub New() InitializeComponent() inputImage = New BitmapImage(New Uri("pack://application:,,,/Images/Code Project Sample_300 dpi.JPEG")) 'inputImage = new BitmapImage(new Uri("http://eskipaper.com/images/cool-morning-fog-wallpaper-1.jpg")); image1.Source = inputImage Go.IsEnabled = False image2.Source = Nothing End Sub Private ReadOnly Property inputImage As BitmapImage Private Sub Go_Click(sender As Object, e As RoutedEventArgs) If image1.Source IsNot Nothing Then Dim rect1 = New Rect() With { .X = Canvas.GetLeft(selectionRectangle), .Y = Canvas.GetTop(selectionRectangle), .Width = selectionRectangle.Width, .Height = selectionRectangle.Height } ' calc scale in PIXEls for CroppedBitmap... Dim img = TryCast(image1.Source, BitmapSource) Dim scaleWidth = (img.PixelWidth) / (image1.ActualWidth) Dim scaleHeight = (img.PixelHeight) / (image1.ActualHeight) Dim rcFrom = New Int32Rect() With { .X = CInt(rect1.X * scaleWidth), .Y = CInt(rect1.Y * scaleHeight), .Width = CInt(rect1.Width * scaleWidth), .Height = CInt(rect1.Height * scaleHeight) } Dim cropped = New CroppedBitmap(inputImage, rcFrom) croppedImage = GetJpgImage(cropped) ' using BitmapImage version to prove its created successfully image2.Source = croppedImage 'cropped End If End Sub Private croppedImage As BitmapImage Private Function GetJpgImage(source As BitmapSource) As BitmapImage Return GetImage(source, New JpegBitmapEncoder()) End Function Private Function GetPngImage(source As BitmapSource) As BitmapImage Return GetImage(source, New PngBitmapEncoder()) End Function Private Function GetImage(source As BitmapSource, encoder As BitmapEncoder) As BitmapImage Dim bmpImage = New BitmapImage() Using srcMS = New MemoryStream() encoder.Frames.Add(BitmapFrame.Create(source)) encoder.Save(srcMS) srcMS.Position = 0 Using destMS = New MemoryStream(srcMS.ToArray()) bmpImage.BeginInit() bmpImage.StreamSource = destMS bmpImage.CacheOption = BitmapCacheOption.OnLoad bmpImage.EndInit() bmpImage.Freeze() End Using End Using Return bmpImage End Function #Region "Mouse events" Private Sub image1_MouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs) If Not isDragging Then anchorPoint.X = e.GetPosition(BackPanel).X anchorPoint.Y = e.GetPosition(BackPanel).Y isDragging = True End If End Sub Private Sub image1_MouseMove(sender As Object, e As MouseEventArgs) If isDragging Then Dim x As Double = e.GetPosition(BackPanel).X Dim y As Double = e.GetPosition(BackPanel).Y selectionRectangle.SetValue(Canvas.LeftProperty, Math.Min(x, anchorPoint.X)) selectionRectangle.SetValue(Canvas.TopProperty, Math.Min(y, anchorPoint.Y)) selectionRectangle.Width = Math.Abs(x - anchorPoint.X) selectionRectangle.Height = Math.Abs(y - anchorPoint.Y) If selectionRectangle.Visibility <> Visibility.Visible Then selectionRectangle.Visibility = Visibility.Visible End If End If End Sub Private Sub image1_MouseLeftButtonUp(sender As Object, e As MouseButtonEventArgs) If isDragging Then isDragging = False If selectionRectangle.Width > 0 Then Go.Visibility = Visibility.Visible Go.IsEnabled = True End If If selectionRectangle.Visibility <> Visibility.Visible Then selectionRectangle.Visibility = Visibility.Visible End If End If End Sub Private Sub RestRect() selectionRectangle.Visibility = Visibility.Collapsed isDragging = False End Sub #End Region Private Sub Save_Click(sender As Object, e A
:(
сначала я преобразую CroppedBitmap в bitmapsource, а затем bitmapsource в bitmap, а затем bitmap в bitmapimage, который он успешно преобразует.
но когда я преобразую растровое изображение в байт, это дает ошибку
Невозможно привести объект типа ' System.Окна.Средства массовой информации.Изображений.Система CroppedBitmap' to type'.Окна.Средства массовой информации.Изображений.Растровое изображение".
спасибо за ваш ценный повтор.. :)
в приведенном выше коде обрезанный объект передает croppedbitmap источнику image2. я хочу передать только растровое изображение.
когда я пассирую объект croppedImage в источник image2, он отображает пустое изображение.:(
Как оказалось, я пропустил один шаг с созданием BitmapImage - мне нужно было установить свойство CacheOption. Я обновлю решение + я добавил сохранить в файл, который, без сомнения, будет вашим следующим вопросом.
еще раз спасибо.. :)
хорошего вам дня... :)
Он отлично работает.
Добро пожаловать. :)
спасибо за код обрезки ... он работает....
пожалуйста помочь
я застрял на проблеме яркости изображения в wpf с помощью ползунка управления.
я попытался передать значения этой функции, но она выдает ошибку
"ссылка на объект не установлена на экземпляр объекта"
Общие функции яркости(изображения бывал как растровое изображение, SliderValue бывал как целое) Как Растровое Изображение
'DrawImage(изображение, GetBrightnessMatrix (процент))
Dim brtR As Single = CSng(SliderValue / 100)
Dim brtG As Single = CSng(SliderValue / 100)
Dim brtB As Single = CSng(SliderValue / 100)
Dim image_attr как новые атрибуты ImageAttributes
Дим см в подразделениях компании = Новый подразделениях компании(новый сингл()() _
{ _
New Single () {brtR, 0.0, 0.0, 0.0, 0.0}, _
New Single () {0.0, brtG, 0.0, 0.0, 0.0}, _
New Single () {0.0, 0.0, brtB, 0.0, 0.0}, _
Новый Сингл() {0.0, 0.0, 0.0, 1.0, 0.0}, _
Новый Сингл() {0.0, 0.0, 0.0, 0.0, 1.0}})
Тусклый прямоугольник как прямоугольник = _
Прямоугольник.Круглые(рис.Метод Getbounds(GraphicsUnit.Пиксель))
Дим ужр как целое число, = изображения.Ширина
Dim hgt как целое число = изображение.Высота
Дим img В качестве нового растрового изображения(ужр, хагат)
Dim gr As Graphics = графика.FromImage(img)
image_attr.SetColorMatrix (см)
гр.Функция drawImage(изображения, прямоугольник, 0, 0, ужр, _
хагат, GraphicsUnit.Пиксель, image_attr)
Возврат img
Конечная Функция
Private Sub SliderBrightness_ValueChanged(ByVal sender As System.Объект, бывал е как система.Окна.RoutedPropertyChangedEventArgs(Of System.Двойной)) Ручки SliderBrightness.ValueChanged
Если образ1.Источник Ничего Не Значит
Dim i как целое число
i = Слайдербрайтность.Ценность
StackPanelImage.Source = ToBitmapImage (яркость (bitmapimage, i))
Конец, Если
Конец Подводной Лодки
Это другой вопрос, поэтому, пожалуйста, начните новый.
ОК :)
https://www.codeproject.com/Questions/1201941/HOW-to-brightness-image-in-WPF-VB-using-slider-con
ПОЖАЛУЙСТА
ПОМОГИ МНЕ....
я начинаю с нового вопроса.
загрузите новый вопрос. вы определенно получите решение. не теряйте надежды.
оставайся счастливой.... :)
Нашел для него одну в интернете...
Graeme_Grant, Пожалуйста, Помогите.
я так близок к ответу.