Что нового

Удаление синего цвета - всех оттенков

Ragn

Новичок
Сообщения
48
Репутация
0
Доброго времени.
Помогите разобраться.

Нашел на форуме скрипт - удаляющий с фото-файла все что имеет синий цвет.
Но он работает все же несколько неточно, потому что светлосиний цвет - он почему-то оставляет.
Код:
#include <GDIPlus.au3>

_GDIPlus_Startup()

$hImage = _GDIPlus_ImageLoadFromFile("1.jpg")
$iW = _GDIPlus_ImageGetWidth($hImage)
$iH = _GDIPlus_ImageGetHeight($hImage)

$tBits = _GDIPlus_BitmapLockBits($hImage, 0, 0, $iW, $iH, BitOR($GDIP_ILMWRITE, $GDIP_ILMREAD))
$iScan0 = DllStructGetData($tBits, "Scan0")
$tPixel = DllStructCreate("int[" & $iW * $iH & "];", $iScan0)
For $iY = 0 To $iH - 1
  $iOffset = $iY * $iW + 1
  For $iX = 0 To $iW - 1
    $iColor = DllStructGetData($tPixel, 1, $iOffset + $iX)
    $iR = BitAND(BitShift($iColor, 16), 0xFF)
    $iG = BitAND(BitShift($iColor, 8), 0xFF)
    $iB = BitAND($iColor, 0xFF)
    If $iR < 100 And $iG < 100 And $iB > 70 Then DllStructSetData($tPixel, 1, 0xFFFFFF, $iOffset + $iX)
  Next
Next
_GDIPlus_BitmapUnlockBits($hImage, $tBits)

_GDIPlus_ImageSaveToFile($hImage, "2.jpg")

_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

Скажите - как изменить скрипт, чтобы он удалял вообще весь синий цвет - любых оттенков ?
С моей точки зрения - скрипт должен анализировать цвет - на преобладание - красного, зеленого или синего. Если синего больше - чем красного или зеленого - то этот цвет удаляется.
 

sngr

AutoIT Гуру
Сообщения
1,011
Репутация
409
$iB > 70 поиграйся с этой цифрой
 
Автор
R

Ragn

Новичок
Сообщения
48
Репутация
0
sngr , не работает такое решение.
Поставил :
Код:
If $iR < 100 And $iG < 100 And $iB > 1


Все равно светло-синий не удаляет.
 
Автор
R

Ragn

Новичок
Сообщения
48
Репутация
0
InnI,
Числовое значение неудаляемого светло-синего цвета: rgb(18,147,204)

А числовое значение тех цветов синих оттенков, которые удаляются: rgb(65,70,187) и rgb(0,0,189)

Также присутствуют зеленые линии rgb(33,178,75) и красные линии rgb(223,32,40) (которые не должны затрагиваться и не затрагиваются скриптом).

Возможно в светлосинем цвете - параметр зеленой составляющей 147, то есть больше 100.
Но визуально-то он все равно воспринимается как синий, а не как зеленый.
Вот как настроить макрос, чтобы удалить этот светлосиний цвет ?
 

InnI

AutoIT Гуру
Сообщения
4,950
Репутация
1,444
Ragn [?]
Возможно в светлосинем цвете - параметр зеленой составляющей 147, то есть больше 100.
Верно. Поэтому нужно изменить условие под нужные вам ограничения. Например
Код:
If $iR < 150 And $iG < 150 And $iB > 200 Then
 
Автор
R

Ragn

Новичок
Сообщения
48
Репутация
0
InnI , ясно. Спасибо за ответ.
 
Верх