Страница: 1 | 2 |
Вопрос: GDI+ 3.0 ) изменить размер битмапа
Добавлено: 31.01.07 11:26
Автор вопроса: -АлександР- | Web-сайт:
Создаю битмап
грузится картинка определенноо размреа
как можно изменить его размер?
есть лм в вб.нет что-то вроде strechblt?
Спасибо!
Ответы
Всего ответов: 16
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 31.01.07 12:34
Коструктор Bitmap(New) сильно перегружен, и при создании картинки ты можешь указать не только нужные тебе размеры, но и кучу всяких разных параметров.. Так что тебе надо просто воспользоваться одним из возможных конструкторов..
Номер ответа: 2
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #2
Добавлено: 31.01.07 14:23
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 31.01.07 15:27
ищущий, да обрящет! ))
Номер ответа: 4
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #4
Добавлено: 01.02.07 01:31
да, но... меня что-то мучаетсовесть за неубитые ресурсы... (((
чтобы в разных процедурах обрабоатть один и ттот же битмап, я копирую его на уровень формы:
Dim pBmp As Bitmap
Private Sub ПродолжитьToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ПродолжитьToolStripMenuItem.Click
'назначаем фильтр
OpenFileD.Filter = "рисунок|*.bmp|фото|*.jpg"
'очищаем
OpenFileD.FileName = ""
'открываем окно
OpenFileD.ShowDialog()
If OpenFileD.FileName = "" Then Return
Try
'создаем битмап для работы с выбранным файлом
Dim bmp As New Bitmap(OpenFileD.FileName)
'показываем картинку
PictureBox1.Image = bmp
'выводим его на уровень формы:
pBmp = bmp
'заголовок
Me.Text = OpenFileD.FileName
'вывод характеристик картинки
TextBox1.Text = CStr(pBmp.Width)
TextBox2.Text = CStr(pBmp.Height)
TextBox1.Select()
TextBox1.SelectionStart = 0
TextBox1.SelectionLength = TextBox1.TextLength
Catch 'если ошибка, то
Return
End Try
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'создаем новый битмап для изменения размеров предыдущего
Dim bmp1 As New Bitmap(pBmp, CInt(TextBox1.Text), CInt(TextBox2.Text))
pBmp = bmp1
PictureBox1.Image = bmp1
End Sub
например так:
'назначаем фильтр
OpenFileD.Filter = "рисунок|*.bmp|фото|*.jpg"
'очищаем
OpenFileD.FileName = ""
'открываем окно
OpenFileD.ShowDialog()
If OpenFileD.FileName = "" Then Return
Try
'создаем битмап для работы с выбранным файлом
Dim bmp As New Bitmap(OpenFileD.FileName)
'показываем картинку
PictureBox1.Image = bmp
'выводим его на уровень формы:
pBmp = bmp
'здесь ругается
bmp.Dispose()
'заголовок
Me.Text = OpenFileD.FileName
'вывод характеристик картинки
TextBox1.Text = CStr(pBmp.Width)
TextBox2.Text = CStr(pBmp.Height)
TextBox1.Select()
TextBox1.SelectionStart = 0
TextBox1.SelectionLength = TextBox1.TextLength
Catch 'если ошибка, то
Return
End Try
End Sub
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 01.02.07 08:28
А чего ты ожидал? Говорил же тебе.. учи теорию!! Так нет же.. ты все с 6-кой возишься...
Дело в том, что в NET (в отличие от 6-ки) почти все объекты передаются не по значению, а по ссылке(т.е. новый объект не создается)! Таким образом твои строки:
pBmp = bmp1
PictureBox1.Image = bmp1
делают следующее:
Ты создаешь новый Bitmap, затем ты старому Bitmap'у присваиваешь ссылку на новый так, что в результате обе переменные указывают на один и тот же объект(ссылка на старый Bitmap теряется)! После чего ты измененую картинку загоняешь в PictureBox (и обе ссылки указывают именно на эту картинку). И после всего ты пытаешься уничтожить картинку, котоорая в контроле! И с чего это вдруг компилятор ругаеццо?
Номер ответа: 6
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #6
Добавлено: 01.02.07 08:34
ООП - это тебе не блокнотики на 6-ке писать, тут думать надо!!! ))))))))))))))))
Вот прям сейчас сядь и снеси 6-ку нафиг!!! И через 3 месяца ты мне спасибо скажешь,что заставил 6-ку убить!! ))))
Номер ответа: 7
Автор ответа:
Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #7
Добавлено: 01.02.07 10:10
Вроде бы кто-то повсюду пишет, что на VB.NET проще по сравнению с VB6 писать, а тут вдруг такая несостыковочка, оказывается, в ООП думать надо )
Номер ответа: 8
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #8
Добавлено: 01.02.07 10:46
)) жжжошь сотона!
Ты понимаешь какая штука.. Нельзя односложно сказать легче или труднее.. для тех кто, хоть как то знаком с принципами ООП по другим языкам, переход на НЕТ не вызывет никаких сложностей, а вот чьи знания ограничиваются 6-кой им да.. им по началу будет туго(но не долго). По той простой причине, что их мышление в плане построения программы абстрагировано от объектов как таковых.. Им сначала надо будет понять тот факт, что в НЕТ практически все, является объектами!! Так же понять то,что любой объект имеет свои свойства и методы, которые и надо будет юзать.. Вот смотри, приведу разницу на простом примере. К примеру у нас есть переменная
Чтобы сделать из числа строку специалист по 6-ке напишет CStr(intAge), а НЕТчик напишет intAge.ToString потому что в НЕТ intAge - есть объект, а у этого объекта есть свои свойства и методы одним из которых и является ToString. А в 6-ке это просто тупо число и больше ничего!! Просто в 6-ке опереруют понятими функция и метод , а в НЕТ класс и объект(+ еще несколько принципиальных отличий от 6-ки как в предыдущем посте). Вот и вся разница. И насколько быстро человек сможет осознать эту разницу настолько легко ему перейти на НЕТ. Но от себя могу добавить, что на НЕТ писать реально удобней, быстрее и легче..
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 01.02.07 10:52
P/S/ Приведу еще один аргумент в пользу НЕТ.. По работе вынужден писать на JAVA.. Так вот.. после НЕТ мне понадобилось 2 дня на изучение сишного синтаксиса и все! Я уже довольно свободно пишу на этом тормознутом языке.. ((( а J# так вообще уже как родной стал...
Номер ответа: 10
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #10
Добавлено: 01.02.07 10:57
Думать как раз не надо.
Bitmap - это класс, все классы - это ссылочные типы.
Чтоб сделать копию класса Bitmap достаточно посмотреть что тот является наследником Image, а Image реализует ICloneable, значит достаточно вызвать метод Clone.
Номер ответа: 11
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #11
Добавлено: 01.02.07 11:07
Ты когда писал на 6-ке.. ты много думал какого типа объект??? ))
Вот отсюда и все трудности у тех,кто переходит с 6-ки...
Номер ответа: 12
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #12
Добавлено: 01.02.07 14:20
Brand
bmp.Dispose()
Номер ответа: 13
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #13
Добавлено: 01.02.07 14:37
А зачем ты Bitmap приводишь к типу Bitmap? Каков глубокий смысл этого действия, ведь метод Clone возвращает тоже Bitmap..
Номер ответа: 14
Автор ответа:
-АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #14
Добавлено: 01.02.07 15:49
не-а, он у меня ругался на то что Option Strict On... не позволяет перевести объект в битмап
проще говоря Clone возвращает объект...
Номер ответа: 15
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #15
Добавлено: 01.02.07 15:54
Ну раз Option Strict On, тогда разумеется все верно...