Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: GDI+ 3.0 ) изменить размер битмапа Добавлено: 31.01.07 11:26  

Автор вопроса:  -АлександР- | Web-сайт: sham.clan.su
Создаю битмап


Dim bmp As New Bitmap(OpenFileD.FileName)


грузится картинка определенноо размреа
как можно изменить его размер?

есть лм в вб.нет что-то вроде strechblt?

Спасибо!

Ответить

  Ответы Всего ответов: 16  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 31.01.07 12:34
Коструктор Bitmap(New) сильно перегружен, и при создании картинки ты можешь указать не только нужные тебе размеры, но и кучу всяких разных параметров.. Так что тебе надо просто воспользоваться одним из возможных конструкторов..

Ответить

Номер ответа: 2
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #2
Добавлено: 31.01.07 14:23
Dim bmp1 As New Bitmap(bmp, 290, 150)
рулит, спасибо!

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #3 Добавлено: 31.01.07 15:27
ищущий, да обрящет! :-)))

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 01.02.07 01:31
да, но... меня что-то мучаетсовесть за неубитые ресурсы... (((

чтобы в разных процедурах обрабоатть один и ттот же битмап, я копирую его на уровень формы:
Public Class Form1
    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
bmp остается незадействованным, но при любых попытках его dispose компилятор пугается за недопустимый параметр(?)

например так:
    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

            'здесь ругается
            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
но при любых попытках его dispose компилятор пугается за недопустимый параметр

А чего ты ожидал? Говорил же тебе.. учи теорию!! Так нет же.. ты все с 6-кой возишься...
Дело в том, что в NET (в отличие от 6-ки) почти все объекты передаются не по значению, а по ссылке(т.е. новый объект не создается)! Таким образом твои строки:
Dim bmp1 As New Bitmap(pBmp, CInt(TextBox1.Text), CInt(TextBox2.Text))
        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-сайт: sharpc.livejournal.com
 Профиль | | #7
Добавлено: 01.02.07 10:10
Вроде бы кто-то повсюду пишет, что на VB.NET проще по сравнению с VB6 писать, а тут вдруг такая несостыковочка, оказывается, в ООП думать надо :))

Ответить

Номер ответа: 8
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #8 Добавлено: 01.02.07 10:46
на VB.NET проще по сравнению с VB6 писать, а тут вдруг такая несостыковочка, оказывается, в ООП думать надо

:-))) жжжошь сотона!
Ты понимаешь какая штука.. Нельзя односложно сказать легче или труднее.. для тех кто, хоть как то знаком с принципами ООП по другим языкам, переход на НЕТ не вызывет никаких сложностей, а вот чьи знания ограничиваются 6-кой им да.. им по началу будет туго(но не долго). По той простой причине, что их мышление в плане построения программы абстрагировано от объектов как таковых.. Им сначала надо будет понять тот факт, что в НЕТ практически все, является объектами!! Так же понять то,что любой объект имеет свои свойства и методы, которые и надо будет юзать.. Вот смотри, приведу разницу на простом примере. К примеру у нас есть переменная
Dim intAge as Int32 = 28

Чтобы сделать из числа строку специалист по 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
Bitmap - это класс, все классы - это ссылочные типы.

Ты когда писал на 6-ке.. ты много думал какого типа объект??? :-)))
Вот отсюда и все трудности у тех,кто переходит с 6-ки...

Ответить

Номер ответа: 12
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #12
Добавлено: 01.02.07 14:20
Brand
Чтоб сделать копию класса Bitmap достаточно посмотреть что тот является наследником Image, а Image реализует ICloneable, значит достаточно вызвать метод Clone.
        PictureBox1.Image = CType(bmp.Clone, Bitmap)
        bmp.Dispose()
я вас правильно понял?

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 01.02.07 14:37
CType(bmp.Clone, Bitmap)

А зачем ты Bitmap приводишь к типу Bitmap? Каков глубокий смысл этого действия, ведь метод Clone возвращает тоже Bitmap..

Ответить

Номер ответа: 14
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #14
Добавлено: 01.02.07 15:49
не-а, он у меня ругался на то что Option Strict On... не позволяет перевести объект в битмап

проще говоря Clone возвращает объект...

Ответить

Номер ответа: 15
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #15 Добавлено: 01.02.07 15:54
Ну раз Option Strict On, тогда разумеется все верно...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам