Как обрезать изображение в WPF VB
я не могу обрезать изображение на контрольном изображении, пожалуйста, помогите.
когда я передаю холст x,y, высоту и ширину обрезки в функцию обрезки, он дает неправильное маленькое изображение обрезки
Заранее спасибо.
Что я уже пробовал:
Public Function Crop(ByVal srcBitmap As Bitmap, _ ByVal cropX As Integer, ByVal cropY As Integer, ByVal cropWidth As Integer, ByVal cropHeight As Integer) As Bitmap ' Create the new bitmap and associated graphics object Dim bmp As New Bitmap(srcBitmap, cropHeight, cropWidth) Dim g As Graphics = Graphics.FromImage(bmp) Dim rect As Rectangle = New Rectangle(cropX, cropY, cropWidth, cropHeight) ' Draw the specified section of the source bitmap to the new one g.DrawImage(srcBitmap, New Rectangle(0, 0, cropHeight, cropWidth), rect, GraphicsUnit.Pixel) ' Clean up srcBitmap.Dispose() Return bmp End Function
Graeme_Grant
Вы используете старый GDI+ в приложении WPF. Почему?
ketan Ram Patil
Dim rect1 как новый Rect(Canvas.GetLeft (selectionRectangle), холст.GetTop(selectionRectangle), selectionRectangle.Ширина, selectionRectangle.Высота)
Dim rcFrom как новая система.Окна.Int32Rect()
rcFrom.Х = Кинт((rect1.Х) * (рис1.Источник.Ширина) / (image1.Ширина))
rcFrom.Г = Кинт((rect1.Г) * (рис1.Источник.Высота) / (изображение 1.Высота))
rcFrom.Width = CInt ((rect1.Ширина) * (изображение 1.Источник.Ширина) / (image1.Ширина))
rcFrom.Высота = CInt ((rect1.Высота) * (изображение 1.Источник.Высота) / (изображение 1.Высота))
'Дим Bitmapimage В Качестве Объекта Bitmapimage
'Объект bitmapimage = рис1.Источник
- Растровое изображение.Источник потока.Искать(0, Системы.ИО.SeekOrigin.Начать)
Dim bs As BitmapSource = New CroppedBitmap(TryCast(image1.Источник, BitmapSource), rcFrom)
Изображение 2.Источник = bs
Конец, Если
я тоже использую эту функцию, но она работает только для небольшого урожая.
для большого урожая это дает "значение не падает с ожидаемым диапазоном " :(
Graeme_Grant
Вы смотрели на ссылку ниже?
ketan Ram Patil
я свежее в wpf :(
куда отправить холст Х,Y,высота,ширина значения..?
Graeme_Grant
Прочтите Решение ниже-Microsoft дает вам рабочее решение.
ketan Ram Patil
я старался изо всех сил, но не могу сопоставить этот код в своем проекте. пожалуйста помочь
Graeme_Grant
Не используйте GDI+.
Вот код по ссылке ниже:
' Create an Image element. Dim croppedImage As New Image() croppedImage.Width = 200 croppedImage.Margin = New Thickness(5) ' Create a CroppedBitmap based off of a xaml defined resource. Dim cb As New CroppedBitmap(CType(Me.Resources("masterImage"), BitmapSource), New Int32Rect(30, 20, 105, 50)) 'select region rect croppedImage.Source = cb 'set image source to cropped
Пожалуйста, найдите время, чтобы прочитать справку Microsoft.
ketan Ram Patil
да, это применимо для небольшого изображения, а не для большого изображения.. it croppedbitmap дает ошибку. "Значение не попадает в диапазон"
когда m передает значение my code Rect1
Dim bs As BitmapSource = New CroppedBitmap(TryCast(image1.Source, BitmapSource), New Int32Rect(rcFrom.X, rcFrom.Y, rcFrom.Ширина, rcFrom.Высота))
Graeme_Grant
Насколько велико изображение??
Graeme_Grant
Это может быть вашей проблемой... Существуют ограничения на то, насколько большими могут быть изображения... Прочтите об этом: Каково максимальное разрешение растрового изображения C# .NET? - переполнение стека[^] и c# - ограничение размера изображения BitmapImage - переполнение стека[^]
Graeme_Grant
Цитата: "размеры 1920 пикселей * 1280 пикселей, 72 dpi ,битовая глубина 24, 152 КБ в формате JPEG"
Это не должно быть проблемой...
ketan Ram Patil
он работает для = размеры 1920 пикселей * 1280 пикселей, 72 dpi ,битовая глубина 24, 152 КБ в формате JPEG
не могу работать для этого формиата изображения = размеры 2496 пикселей * 3504 пикселя, 300 точек на дюйм ,битовая глубина 24, 152 КБ в формате JPEG
Graeme_Grant
Какой метод вы используете и что такое сообщение об ошибке?
ketan Ram Patil
https://stackoverflow.com/questions/39261580/image-cropping-in-c-values-does-not-fall-in-expected-range
та же проблема....
Graeme_Grant
Ладно, я знаю, что ваша проблема, скорее всего, будет... ошибка расчета. Ниже я опубликую новое решение с рабочим кодом...
Graeme_Grant
Как вы поступили с решением 2 ниже?
Graeme_Grant
Что все это значит? Мое решение помогло вам заставить его работать???
ketan Ram Patil
спасибо за код. код отлично работает для 96 точек на дюйм, но
для 300 точек на дюйм дает "значение не попадает в ожидаемый диапазон"
Graeme_Grant
разместите изображение с разрешением 300 точек на дюйм где-нибудь и поделитесь url-адресом.Я посмотрю на него поближе.
ketan Ram Patil
извините за поздний ответ . https://drive.google.com/file/d/0B0Hbd1jJiwLFN3VtTUY1Nl9rUFk/view
Graeme_Grant
Все благо. Странно, что это сработало для исходного большого тестового изображения... Наверное, мне просто повезло!
Новое изображение показывало, что расчет масштаба вышел из строя и захватил неправильную часть изображения выше. Как только я перешел на пиксели для CroppedBitmap(xxx)
в Go_Click
метод, позиционирование было зафиксировано! Смотрите обновленное Решение 2[^] ниже...
ketan Ram Patil
Ты великий... < 3 < 3
Спасибо:) за ваш ценный ответ..:)
n еще раз спасибо...... это работает отлично.
Graeme_Grant
Добро пожаловать! :)
Graeme_Grant
Я обычно не упоминаю об этом, но это хороший этикет, чтобы отметить вопрос как ответ, как вы упомянули выше, чтобы другие, кто видит это, знали...
ketan Ram Patil
я не решаюсь снова задать этот вопрос... извините за это.
на самом деле я отображаю прямоугольник на изображении при нажатии кнопки обрезки, и я хочу настроить прямоугольник во время выполнения пользователем. после нажатия кнопки ОК изображение будет обрезано. я могу нарисовать прямоугольник на изображении, но не могу изменить размер прямоугольника по определению пользователя.
у меня нет слов, чтобы сказать вам, чтобы помочь мне. когда вы свободны, тогда повторите. еще раз прошу прощения.
Graeme_Grant
К сожалению, не понимая.
ketan Ram Patil
когда пользователь нажимает на кнопку обрезки, то автоматически обрезает прямоугольник отображения на элементе управления изображением. пользователь может регулировать ширину высоты прямоугольника. в соответствии с высотой и шириной прямоугольника изображение обрезается сразу же на изображении control.at время выполнения.
Graeme_Grant
Все еще не понимая... Он уже делает это...
Когда вы ответите на этот вопрос, пожалуйста, начните новый вопрос.
ketan Ram Patil
вы видели программное обеспечение принтеров hp? после сканирования изображения они обеспечивают функциональность обрезки, я хочу сделать ту же функциональность обрезки ... я хочу предоставить прямоугольник обрезки на изображении. :(
Graeme_Grant
Вы хотите изменить размер прямоугольника выделения, а не рисовать новый? Это выходит за рамки данного вопроса. Вам нужно исследовать рукоятки захвата, которые можно перетаскивать.
Я закрываю это дело. Пожалуйста, исследуйте и задавайте новые вопросы для получения дополнительной информации, а не добавляйте к этому.
ketan Ram Patil
да, я хочу изменить размер прямоугольника выделения, чтобы не рисовать новый. хорошо.. я буду искать на ручках захвата спасибо за ваш ценный повтор.. :)
ketan Ram Patil
еще раз спасибо за ручкой слова и помогли мне найти мою проблему наконец-то я нашел решение. спасибо еще раз..
вы-gr8... :)
ketan Ram Patil
я хочу задать тебе вопрос. Как удалось подсчитать перейдите. Математика урожая.
какую статью мне нужно прочитать для изучения.
Graeme_Grant
Никакого сайта... Я использовал электронную таблицу excel и разработал ее сам.
ketan Ram Patil
ОК .. :) gr8...
я не решаюсь вам сказать.
то же самое снова значение дозы не упадет с в ожидаемом диапазоне проблемы случаются и со мной... :(
с новым проектом изменения размера прямоугольника.
shubh2895
спасибо за код обрезки ... он работает....
пожалуйста помочь
я застрял на проблеме яркости изображения в 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))
Конец, Если
Конец Подводной Лодки