alloc(newmem,2048,21AF2BB0000) 
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
// DllCallAddress("uint:cdecl", DllStructGetPtr($tCodeBuffer), "ptr", DllStructGetPtr($tPixelData), "ptr", DllStructGetPtr($tStruct_ARGB), "int", $iPixels)
// ;64Bit! -> ;first 4 parameters will be saved in rcx,rdx,r8,r9
push rdi
push rsi
push rbx
push rbp

mov rsi,rcx // ;pointer to first pixel in memory from the bmp > address check $tPixelData
mov rdi,rdx // ;pointer to memory from struct                 > address save $tStruct_ARGB
mov rbx,r8 // ;amount of pixels                               > max pixel $iPixels

mov rax,[rsi] // address pixel memory xy
sub rsi,4 // -4 de fix + 4
sub rdi,4 // -4 de fix + 4

loop1:
add rsi,4 // +4 = 0 da fix check $tPixelData
add rdi,4 // +4 = 0 da fix save $tStruct_ARGB

cmp byte ptr [rsi+0],00 // pixel xy Opt1 > Opt2 0xFF0000 0x70
JNE if_min01
mov [rsi+0],01
if_min01:

cmp byte ptr [rsi+1],00 // pixel xy Opt1 > Opt2 0xFF0000 0x70
JNE if_min02
mov [rsi+1],01
if_min02:

cmp byte ptr [rsi+2],00 // pixel xy Opt1 > Opt2 0xFF0000 0x70
JNE if_min03
mov [rsi+2],01
if_min03:

cmp byte ptr [rsi+0],FF // pixel xy Opt1 > Opt2 0xFF0000 0x70
JNE if_max01
mov [rsi+0],FE
if_max01:

cmp byte ptr [rsi+1],FF // pixel xy Opt1 > Opt2 0xFF0000 0x70
JNE if_max02
mov [rsi+1],FE
if_max02:

cmp byte ptr [rsi+2],FF // pixel xy Opt1 > Opt2 0xFF0000 0x70
JNE if_max03
mov [rsi+2],FE
if_max03:

cmp byte ptr [rsi+0],77 // pixel xy Opt1 > Opt2 0xFF0000 0x70
JB if01
cmp byte ptr [rsi+0],99 // pixel xy Opt1 < Opt2 0xFF0000 0xFF
JA if01
cmp byte ptr [rsi+1],77 // pixel xy Opt1 > Opt2 0x00FF00 0x70
JB if01
cmp byte ptr [rsi+1],99 // pixel xy Opt1 < Opt2 0x00FF00 0xFF
JA if01
cmp byte ptr [rsi+2],77 // pixel xy Opt1 > Opt2 0x0000FF 0x70
JB if01
cmp byte ptr [rsi+2],99 // pixel xy Opt1 < Opt2 0x0000FF 0xFF
JA if01

mov [rdi+0],01 // -8 fix = rsi
mov [rdi+4],rbx
mov rbx,1 // exit loop
if01:

sub rbx,1 // for loop -1 = 0
ja loop1

pop rbp
pop rbx
pop rsi
pop rdi
ret

exit:
jmp returnhere

21AF2BB0000:
jmp newmem
nop
returnhere:

