Многие помнят ту тему, где обсуждали существующий колормод, где была раскрыта тайна его работы, и эта тема была удалена. Я после этого еще долго ломал голову над тем, как должна работать коррекция. В итоге, перечитав кучу инфы (впустую), потратив кучу времени на различные комбинации, расчеты и пр. - иии, ПРОФИТ
. Конечно работает он не так изящно и быстро как оригинальный, но зато появляется больше возможностей. Да и сам алгоритм оказался не таким уж и сложным, пару битовых операций, и готово.
Написал это все на км, скорость все равно подводила
. А тут наконец удалось заставить работать DLL библиотеки. Переписал все это дело в делфи. Скорость вполне себе ничего вышла, мой калькулятор справляется с областью (0, 0, 1000, 100)=100кпикс за 1.5сек. При этом пишет это все сразу в память км.
Небольшое описание:
Режимов в моем случае - 23. С каждым следующим режимом добавляется один бит на пиксель.
Режимы коррекции-
1 - 2 цвета
2 - 4 цвета
3 - 8 цветов
4 - 16 цветов
5 - 32 цвета
.... и так далее, до 23 - 8388608 цветов
как выглядят обработанные изображения:
оригинал
по нарастающей, до двенадцатого режима
и так далее...
Написано строго под версию 4.13.014b. При первом вызове подпрограммы, произведется поиск адреса начала графического буфера км, занимает пару секунд. Далее работает довольно быстро.
Интересно, как поведет себя данная процедура на других ПК.
Код пока не буду выкладывать, пусть побудет у меня
.
Пример вызова:
SUB(s_cmode, $x1_cm, $y1_cm, $x2_cm, $y2_cm, $mode_cm)
IF($adress_cm = 0)
$pid_cm = HGETPID($_hwnd_self)
PXLREPLACE (0, 0, $_xmax, $_ymax, -1, 0)
PXLREPLACE (0, 0, 0, 0, -1, 1234567)
CALL("adress_clip.dll", $pid_cm)
$adress_cm = $_return1
GETSCREEN
END_IF
CALL("c_mode.dll" ,$x1_cm, $y1_cm, $x2_cm, $y2_cm, $mode_cm, $pid_cm, $adress_cm, $_xmax)
END_SUB
///////////////////////////////////////////////////////
$x1 = 540
$y1 = 310
$x2 = 780
$y2 = 460
GETSCREEN
//вызов
s_cmode($x1, $y1, $x2, $y2, 3)
SCREENSHOT // смотрим
halt
Естественно, длл-ки в одной дерриктории со скриптом. Две библиотеки во вложении. У кого фобия к неизвестным длл, проходим мимо
.
Знаком с делфи всего пару дней, так что скорее всего буду совершенствовать эти библиотеки по мере моих способностей.