Страница: 1 | 2 |
Вопрос: Rotate PictureBox
Добавлено: 13.10.05 10:14
Автор вопроса: Слегач
Ответы
Всего ответов: 24
Номер ответа: 16
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #16
Добавлено: 15.10.05 07:10
Я там специальную оптимизацию сделал. (Y-координату к X приплюсовал). А тупой VB думает, что я выхожу за границы массива. В екзешнике-то я все проверки вырубаю.
Номер ответа: 17
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #17
Добавлено: 15.10.05 07:42
Optimization +
Stack Frames –
Pentium-safe FDIV –
Range Checking –
I/O Checking +
Overflow Checking –
Дык он чего в VB все флаги поставил, а в Delphi не все? Нечестно это как-то.
Public Declare Function GetTickCount Lib "kernel32" () As Long
Option Explicit
Public Function Factorial(ByVal x As Long) As Double
Dim i As Long
Dim t As Double
t = 1
For i = 2 To x
t = t * i
Next i
Factorial = t
End Function
Неувязочка вышла... t у нас здесь Double, а i Long. Приходится при умножении еще и конвертировать.
Хотя при некоторых операциях вещественная арифметика может быть эффективнее целочисленной, в графике, где все упирается в обращение к байтовому массиву по целому индексу с присвоением целого значения, это исключено. Не зря в движке Duke Nukem 3D от чисел с плавающей точкой практически полностью отказались.
Я там специальную оптимизацию сделал. (Y-координату к X приплюсовал). А тупой VB думает, что я выхожу за границы массива. В екзешнике-то я все проверки вырубаю.
Long меня вполне устраивает.
Номер ответа: 18
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #18
Добавлено: 15.10.05 08:23
Я понял с первого раза, спасибо . А чо ты хотел подчеркнуть словом GetObjectAPI? Что это API функция?
Надо же, не знал что объект Picture всего лишь псевдоним для HBITMAP.
Интересная реализация, правда сложная. Сколько у тебя времени ушло чтобы всё это подогнать?
Номер ответа: 19
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #19
Добавлено: 15.10.05 08:35
Да давно нашел где-то уже в готовом виде. Так до сих пор и юзаю.
Номер ответа: 20
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #20
Добавлено: 15.10.05 08:48
Хотел спросить сам ли ты написал, но похоже люди обижаются когда им задаёшь такой вопрос
Измени библиотеку на 6-ю версию в объявлении VarPtrArray, а GetObjectAPI лучше заменить просто на GetObject. Вообще, выразить неудобную последовательность RGBQUAD через двумерный (длина и ширина) массив, ссылающийся на данные рисунка - это кто то здорово постарался.
Номер ответа: 21
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #21
Добавлено: 15.10.05 09:07
Сам я только под 24 бита переделать додумался (изначально было только 8 бит на пиксель). При этом если у меня размер изображения равен 640x480, то размерность байтового массива составит 1920x480, и, как я уже говорил, каждый пиксел займет три элемента, определяющие три канала.
А разница какая-нибудь будет?
Номер ответа: 22
Автор ответа:
Morpheus
Вопросов: 224
Ответов: 3777
Web-сайт:
Профиль | | #22
Добавлено: 15.10.05 21:25
Я конечно обоими руками за целочисленную математику, но хоть тресни не могу обойтись без горячо любимых мной sin/cos, а так как работаю тока в радианах, в массив пихать, попутно переводя обратно в градусы - себе накладней
Номер ответа: 23
Автор ответа:
Страшный Сон
Вопросов: 46
Ответов: 848
Профиль | | #23
Добавлено: 16.10.05 21:58
Иногда можно эмулировать косинус в цикле так:
Dim S!, SV!, SS!
S = 1
Do
...
SS = S / -0.01
SV = SV + SS
S = S + SV
...
Loop
Это гораздо быстрее, чем вычислять его каждый раз.
Номер ответа: 24
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #24
Добавлено: 17.10.05 18:19
Кстати, я пишу графический редактор и мне приходится это делать там и тут. Я даже модуль написал, занимающийся ссыланием массивов. Чтобы каждый раз SafeArray не таскать и не заполнять.
Правда моя программа теперь часто валится, если я там что-нибудь не так сделаю.
Я даже было хотел этот модуль в примеры вывалить, но руки не дошли - оформить его надо малость.