Страница: 1 | 2 |
Вопрос: Rotate PictureBox
Добавлено: 13.10.05 10:14
Автор вопроса: Слегач
Кто-нибудь сталкивался с задачей вращения PictureBoxа? Есть идеи?
Или...
Как вывести текст по вертикали?(развернув на 90 градусов)
На принтер и в PictureBox...
Ответы
Всего ответов: 24
Номер ответа: 1
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #1
Добавлено: 13.10.05 12:26
Нужен пикчербокс, его копия и таймер:
Dim lMidPoint As Long, CosAngle As Double, dblSize As Double
CosAngle = Cos(Angle * 6.28)
If SpinStyle = vbHorizontal Then
lMidPoint = picDest.ScaleWidth / 2
Else
lMidPoint = picDest.ScaleHeight / 2
End If
dblSize = 2 * lMidPoint * CosAngle
k = 1 - Abs(CosAngle)
If Abs(dblSize) < 1 Then dblSize = 1 * Sgn(Angle)
picDest.Visible = False
If SpinStyle = vbHorizontal Then
picDest.PaintPicture picSource.Picture, lMidPoint * (1 - CosAngle), 0, dblSize, picDest.ScaleHeight
picDest.Line (0, 0)-(lMidPoint * k, picDest.ScaleHeight), Clr1, BF
picDest.Line (picDest.ScaleWidth - lMidPoint * k, 0)-(picDest.ScaleWidth, picDest.ScaleHeight), Clr2, BF
Else
picDest.PaintPicture picSource.Picture, 0, lMidPoint * (1 - CosAngle), picDest.ScaleWidth, dblSize
picDest.Line (0, 0)-(picDest.ScaleWidth, lMidPoint * k), Clr1, BF
picDest.Line (0, picDest.ScaleHeight - lMidPoint * k)-(picDest.ScaleWidth, picDest.ScaleHeight), Clr2, BF
End If
picDest.Visible = True
End Sub
Private Sub Timer1_Timer()
Static ang As Double
ang = ang + 0.01
If ang > 1 Then ang = ang - 1
SpinPic PicSpin, PicCopy, ang, vbWhite, vbWhite, vbHorizontal
End Sub
Номер ответа: 2
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #2
Добавлено: 13.10.05 16:58
дял афигенно быстрого вращения (действительно афигенно) поможет тебе функция PlgBlt и чуть чуть тригонометрии (жаль только под виндой NT пашет)
Номер ответа: 3
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #3
Добавлено: 13.10.05 17:02
Я ж вроде делал алгоритм офигенно быстрого вращения... Вот ссылка: http://lezsite.narod.ru/ice24.htm
Номер ответа: 4
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #4
Добавлено: 13.10.05 21:54
А с текстом надо просто покопать LOGFONT. Там вроде есть возможность развернуть его на угол.
Номер ответа: 5
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #5
Добавлено: 13.10.05 22:36
действительно оченб быстро.... тока я нифига не понял по какому принципу он работает
Номер ответа: 6
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #6
Добавлено: 14.10.05 01:52
2 Страшный Сон
В http://lezsite.narod.ru/ice24.htm забыл положить main11.bas
Номер ответа: 7
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #7
Добавлено: 14.10.05 02:20
Значит сейчас исправлю. Заодно и обновление сделаю. Там я еще процентов на 10-15 производительность поднял.
Номер ответа: 8
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #8
Добавлено: 14.10.05 02:23
По принципу, описанному мной в топике "Спрайты для игроделов". Массив то бишь.
Номер ответа: 9
Автор ответа:
«UL.eXe»
ICQ: 197.895.916.247
Вопросов: 72
Ответов: 540
Профиль | | #9
Добавлено: 14.10.05 13:31
http://mastershome.net.ru/vbfaq/b07.htm
Номер ответа: 10
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #10
Добавлено: 14.10.05 16:43
2 «Unknown Lamer»: Этот пример не идет ни в какое сравнение с моим. Как он написан, мне совсем не понравилось. Хоть и билинейная интерполяция - это хорошо, я сделаю ее так, чтобы она выдавала не меньше 20 кадров в секудну, вращая картинку 640x480.
Номер ответа: 11
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #11
Добавлено: 14.10.05 18:37
Страшный Сон:
Классный пример!
По моему у меня твой пример выдавал 100-200 кадров в секуну, не знаю от чего зависит, так что дофига
Мой пример мне давал до 300 FPS на небольшихкартинках и до 16000 на иконках, зато на твоей дал около 30 надо поробывать юзать не тупое вращение - там из-за тригонометрии теряется, а как у тебя попробывать, ладно - потом глянем
Номер ответа: 12
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #12
Добавлено: 14.10.05 21:49
Основная рекомендация - никакой вещественной арифметики. Только целые числа - и тормозов не будет. У меня коэффиценты масштабирования задаются целыми числами, причем за единицу принимается 65536. Это намного быстрее чем использование функции Int, которая (и соответственно преобразование float-integer) за раз съедает свыше ста тактов камня.
Номер ответа: 13
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #13
Добавлено: 14.10.05 22:15
Пожалуйста взгляните это:
http://vt-dbnz.narod.ru/optimizingvb6.rar
Там я произвел тестирование и к своему удивлению получил, что вещественная арифметика в VB6 работает БЫСТРЕЕ целочисленной. Если кто хочет меня опровергнуть (другими тестами), создавайте тему обсуждения статьи. Мне очень интересно будет.
Номер ответа: 14
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #14
Добавлено: 14.10.05 22:17
Для таких случаев может быть удобнее использовать тип Currency. Хотя я думаю, что он все же будет медленнее, т.к. все-таки 64-битный.
Номер ответа: 15
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #15
Добавлено: 15.10.05 06:35
Действительно быстро (у меня 15-25 кадров). А почему в IDE ошибку "Нижний индекс вне диапазона" выдаёт?