Наверное можно попробовать прогнать первую палитру через что-либо такое, сравнивая получившиеся от 0 до 17 уровни.
Скрытый текст
Код:ClrLum: push b mov b,a ani 111B mov c,a mov a,b rrc rrc rrc ani 111B add c mov c,a mov a,b rlc rlc ani 11B add c pop b ret[свернуть]
Найти индекс с самым минимальным и использовать его как индекс цвета бордюра, надеясь что он не станет сильно ярче (или вообще не поменяется) в следующих далее палитрах.
Скрытый текст
Код:;DrkBrd Set border to darkest color in palette ;INPUT <HL> = 16-byte palette address ;OUTPUT [Border] becomes index of darkest color in palette DrkBrd: lxi b,10FFh DrkB01: mov a,m call ClrLum ; <A> is guaranteed to be [0..11h] cmp c jnc DrkB02 mov c,a mov e,b ; 16 - index DrkB02:inx h dcr b jnz DrkB01 mvi a,10h sub e jmp SetBrd[свернуть]
Если в картинке отсутствует чёрный, то бордюр будет каким-то из тёмных цветов (в Robotz в меню опций бордюр вышел тёмно-синим). По нормальному, надо ещё разную яркость компонент с одним уровнем учесть.
В пределе можно пробежать по всем палитрам, найти minimum minorum, замутить его с частотой изменений и выбрать индекс самого тёмного цвета с наименьшей частотой изменений.
Можно ещё "нормализовать" биты изображения так чтобы нулёвой индекс палитры всегда получался наиболее тёмным. Но это наверное при конверсии удобнее делать.





Ответить с цитированием