Zloy_Gelud
Silver Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ПереписАл функу конвертирования RGB в BGR без использования плагина: Код: RGB2BGR = function (...) if (#arg == 3) then -- RGB color return (arg[3] * 65536 + arg[2] * 256 + arg[1]); else -- HEX color local nRed, nGreen, nBlue nRed = arg[1] % 256; nGreen = ((arg[1] - nRed) % 65536) / 256; nBlue = Math.Round((arg[1] - nGreen) / 65536, 0); return (nBlue * 65536 + nGreen * 256 + nRed); end return 0; end | Теперь пробуем ее в цикле: Код: t1 = DLL.CallFunction("kernel32.dll", "GetTickCount", "", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL); for i = 1, 4 * (800 * 600), 4 do -- преобразовываем RGB-цвет в BGR RGB2BGR(192, 192, 192); end t2 = DLL.CallFunction("kernel32.dll", "GetTickCount", "", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL); Dialog.Message("Notice", t2-t1, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); | Результат: ~1750 мс. Если использовать функу так: Код: t1 = DLL.CallFunction("kernel32.dll", "GetTickCount", "", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL); for i = 1, 4 * (800 * 600), 4 do -- преобразовываем десятичный тип цвета в BGR RGB2BGR(Math.HexColorToNumber("c0c0c0")); end t2 = DLL.CallFunction("kernel32.dll", "GetTickCount", "", DLL_RETURN_TYPE_INTEGER, DLL_CALL_STDCALL); Dialog.Message("Notice", t2-t1, MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1); | Результат: ~4063 мс. Т.е. чем больше математических операций, тем дольше цикл работает. Сделал вывод: что мы будет плагин использовать для конвертирования цвета, что стандартные возможности AMS, - один хрен все печально. | Всего записей: 3267 | Зарегистр. 30-05-2007 | Отправлено: 10:10 21-02-2013 | Исправлено: Zloy_Gelud, 12:21 21-02-2013 |
|