Вопрос: Rotate PictureBox | Добавлено: 13.10.05 10:14 |
Автор вопроса: ![]() |
Кто-нибудь сталкивался с задачей вращения PictureBoxа? Есть идеи?
Или... Как вывести текст по вертикали?(развернув на 90 градусов) На принтер и в PictureBox... |
Ответы | Всего ответов: 24 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 197.895.916.247 Вопросов: 72 Ответов: 540 |
Профиль | Цитата | #1 | Добавлено: 13.10.05 12:26 |
Нужен пикчербокс, его копия и таймер:
Public Sub SpinPic(picDest As PictureBox, picSource As PictureBox, Angle As Double, ByVal Clr1 As Long, ByVal Clr2 As Long, ByVal SpinStyle As Integer)
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 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 345743490 Вопросов: 42 Ответов: 385 |
Web-сайт: Профиль | Цитата | #4 | Добавлено: 13.10.05 21:54 |
А с текстом надо просто покопать LOGFONT. Там вроде есть возможность развернуть его на угол. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 224 Ответов: 3777 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 13.10.05 22:36 |
действительно оченб быстро.... тока я нифига не понял по какому принципу он работает ![]() |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик 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 |
В http://lezsite.narod.ru/ice24.htm забыл положить main11.bas
Значит сейчас исправлю. Заодно и обновление сделаю. Там я еще процентов на 10-15 производительность поднял. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 46 Ответов: 848 |
Профиль | Цитата | #8 | Добавлено: 14.10.05 02:23 |
тока я нифига не понял по какому принципу он работает
![]() По принципу, описанному мной в топике "Спрайты для игроделов". Массив то бишь. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() Вопросов: 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 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 345743490 Вопросов: 42 Ответов: 385 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 14.10.05 22:15 |
Основная рекомендация - никакой вещественной арифметики. Только целые числа - и тормозов не будет.
Пожалуйста взгляните это: http://vt-dbnz.narod.ru/optimizingvb6.rar Там я произвел тестирование и к своему удивлению получил, что вещественная арифметика в VB6 работает БЫСТРЕЕ целочисленной. Если кто хочет меня опровергнуть (другими тестами), создавайте тему обсуждения статьи. Мне очень интересно будет. |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ICQ: 345743490 Вопросов: 42 Ответов: 385 |
Web-сайт: Профиль | Цитата | #14 | Добавлено: 14.10.05 22:17 |
за единицу принимается 65536
Для таких случаев может быть удобнее использовать тип Currency. Хотя я думаю, что он все же будет медленнее, т.к. все-таки 64-битный. |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #15 | Добавлено: 15.10.05 06:35 |
Я ж вроде делал алгоритм офигенно быстрого вращения.
Действительно быстро (у меня 15-25 кадров). А почему в IDE ошибку "Нижний индекс вне диапазона" выдаёт? |
|