Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
Нужен пикчербокс, его копия и таймер:

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
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #4
Добавлено: 13.10.05 21:54
А с текстом надо просто покопать LOGFONT. Там вроде есть возможность развернуть его на угол.

Ответить

Номер ответа: 5
Автор ответа:
 Morpheus



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #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
В http://lezsite.narod.ru/ice24.htm забыл положить main11.bas

Значит сейчас исправлю. Заодно и обновление сделаю. Там я еще процентов на 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-сайт: xury.zx6.ru
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #13
Добавлено: 14.10.05 22:15
Основная рекомендация - никакой вещественной арифметики. Только целые числа - и тормозов не будет.

Пожалуйста взгляните это:
http://vt-dbnz.narod.ru/optimizingvb6.rar
Там я произвел тестирование и к своему удивлению получил, что вещественная арифметика в VB6 работает БЫСТРЕЕ целочисленной. Если кто хочет меня опровергнуть (другими тестами), создавайте тему обсуждения статьи. Мне очень интересно будет.

Ответить

Номер ответа: 14
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #14
Добавлено: 14.10.05 22:17
за единицу принимается 65536

Для таких случаев может быть удобнее использовать тип Currency. Хотя я думаю, что он все же будет медленнее, т.к. все-таки 64-битный.

Ответить

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



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #15
Добавлено: 15.10.05 06:35
Я ж вроде делал алгоритм офигенно быстрого вращения.

 Действительно быстро (у меня 15-25 кадров). А почему в IDE ошибку "Нижний индекс вне диапазона" выдаёт?

Ответить

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

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



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