Страница: 1 |
|
Вопрос: Ближайший цвет из 256-цветной палитры!
|
Добавлено: 26.02.03 18:54
|
|
Автор вопроса: Страшный Сон
|
У меня теперь такая ситуатион сложилась: есть 256-цветная палитра. И есть функция, которая находит ближайший цвет к любому, выраженному в обычном, 24-битном виде. Private Function NearestColor(COLOR&) As Byte Dim RGBB(1) As RGBS, I As Integer, Amnt(255) As Integer, RI As Byte, Nam As Integer RGBB(0) = AntiRGB(COLOR) For I = 0 To 255 RGBB(1) = AntiRGB(Pale(I)) Amnt(I) = MG(RGBB(0).cR - RGBB(1).cR) + MG(RGBB(0).cG - RGBB(1).cG) + MG(RGBB(0).cB - RGBB(1).cB) Next I Nam = 32767 For I = 0 To 255 If Amnt(I) <= Nam Then Nam = Amnt(I): RI = I Next I NearestColor = RI End Function Эта функция возвращает индекс ближайшего цвета. Работает нормально, только уж больно медленно. Подскажите, можно ли её как-нить ускорить? Убрать циклы?
Ответить
|
Номер ответа: 4 Автор ответа: Воронков Василий
Вопросов: 1 Ответов: 90
|
Профиль | | #4
|
Добавлено: 03.03.03 15:27
|
Разница есть. Подобный алгоритм скомпилированный на бейсике работает в 4-5 раз медленнее, чем скомп. на одном из компиляторов С. А если писать на асме, то во все 10 раз. Чем "ниже" язык, тем быстрее. Попробуй может использовать массивы. Я уже забыл, как в бейсике пишутся массивы, но тут по идее хватит обычного одномерного. Что-нить вроде int[] R = new int[255]; for (int i=0; i<256;i++) // Однократно заполняешь массив {R[i]=i;} Или перебирай все операторы для создания циклов - может, ускорится. (WHILE/WEND, DO/LOOP...)
Ответить
|
Номер ответа: 5 Автор ответа: Страшный Сон
Вопросов: 46 Ответов: 848
|
Профиль | | #5
|
Добавлено: 03.03.03 21:24
|
Почти вся медленность Бейсика из-за того, что он при каждой операции отлавливает возможные ошибки, а если в Advanced Optimizations поустанавливать флажки, производительность программы в некоторых случаях увеличивается в 10 раз. Но этого мне не хватает. Ещё можно провести такую проверку: Допустим, 640*480=307200, это количество пикселей в моей картинке. На каждый пиксел приходится куча операций, несколько тысяч. Соответственно, чтобы находить ближайшие цвета в таких картинках по одной штуке в секунду, нужно иметь какую-нибудь многопроцессорную супермашину, так что я думаю, надо что-то придумать пошустрее.
Ответить
|
Страница: 1 |
Поиск по форуму