Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: Rotate PictureBox Добавлено: 13.10.05 10:14  

Автор вопроса:  Слегач

Ответить

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

Номер ответа: 16
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #16 Добавлено: 15.10.05 07:10
А почему в IDE ошибку "Нижний индекс вне диапазона" выдаёт?

Я там специальную оптимизацию сделал. (Y-координату к X приплюсовал). А тупой VB думает, что я выхожу за границы массива. В екзешнике-то я все проверки вырубаю.

Ответить

Номер ответа: 17
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #17 Добавлено: 15.10.05 07:42
http://vt-dbnz.narod.ru/optimizingvb6.rar

2. В Delphi были установлены следующие флаги:
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 от чисел с плавающей точкой практически полностью отказались.

А почему в IDE ошибку "Нижний индекс вне диапазона" выдаёт?

Я там специальную оптимизацию сделал. (Y-координату к X приплюсовал). А тупой VB думает, что я выхожу за границы массива. В екзешнике-то я все проверки вырубаю.

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

Long меня вполне устраивает.

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #18
Добавлено: 15.10.05 08:23
Я понял с первого раза, спасибо :). А чо ты хотел подчеркнуть словом GetObjectAPI? Что это API функция?
GetObjectAPI Me.Picture, Len(bmp), bmp

 Надо же, не знал что объект Picture всего лишь псевдоним для HBITMAP.
 Интересная реализация, правда сложная. Сколько у тебя времени ушло чтобы всё это подогнать?

Ответить

Номер ответа: 19
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #19 Добавлено: 15.10.05 08:35
Сколько у тебя времени ушло чтобы всё это подогнать?

Да давно нашел где-то уже в готовом виде. Так до сих пор и юзаю.

Ответить

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



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

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #20
Добавлено: 15.10.05 08:48
Да давно нашел где-то уже в готовом виде.

 Хотел спросить сам ли ты написал, но похоже люди обижаются когда им задаёшь такой вопрос :)
 Измени библиотеку на 6-ю версию в объявлении VarPtrArray, а GetObjectAPI лучше заменить просто на GetObject. Вообще, выразить неудобную последовательность RGBQUAD через двумерный (длина и ширина) массив, ссылающийся на данные рисунка - это кто то здорово постарался.

Ответить

Номер ответа: 21
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #21 Добавлено: 15.10.05 09:07
Сам я только под 24 бита переделать додумался (изначально было только 8 бит на пиксель). При этом если у меня размер изображения равен 640x480, то размерность байтового массива составит 1920x480, и, как я уже говорил, каждый пиксел займет три элемента, определяющие три канала.

а GetObjectAPI лучше заменить просто на GetObject

А разница какая-нибудь будет?

Ответить

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



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #24
Добавлено: 17.10.05 18:19
Вообще, выразить неудобную последовательность RGBQUAD через двумерный (длина и ширина) массив, ссылающийся на данные рисунка - это кто то здорово постарался.

Кстати, я пишу графический редактор и мне приходится это делать там и тут. Я даже модуль написал, занимающийся ссыланием массивов. Чтобы каждый раз SafeArray не таскать и не заполнять.
Правда моя программа теперь часто валится, если я там что-нибудь не так сделаю.
Я даже было хотел этот модуль в примеры вывалить, но руки не дошли - оформить его надо малость.

Ответить

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

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



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