Code archives/Graphics/Color replacement - proportions

This code has been declared by its author to be Public Domain code.

Download source code

Color replacement - proportions by Matt Merkulov2007
From Blitz et cetera article
Image used:
;Color replacement - proportions by Matt Merkulov

Graphics 640,480,32

i = LoadImage("image1.jpg")
DrawBlock i, 0,0

; Color to be replaced
r1# = 255
g1# = 64
b1# = 64
; Calculating its proportional coefficients
s1 = r1# + g1# + b1#
kr1# = r1# / s1
kg1# = g1# / s1
kb1# = b1# / s1
; Color to replace with
r2# = 0
g2# = 0
b2# = 255
; Calculating its proportional coefficients
s2=r2# + g2# + b2#
r2# = r2# / s2
g2# = g2# / s2
b2# = b2# / s2
; An admissible difference of factors
skmax# =.5

For y = 0 To 479
 For x = 0 To 639
 ; Decompositing color on components
 p = ReadPixel(x, y)
 b# = p And 255
 g# = (p Shr 8) And 255
 r# = (p Shr 16) And 255
 ; Calculating proportion coefficients of initial color
 s = r# + g# + b#
 kr# = r# / s
 kg# = g# / s
 kb# = b# / s
 sk# = Abs (kr1# - kr#) + Abs (kg1# - kg#) + Abs (kb1# - kb#)
 ; Check on an admissible difference of coefficients
 If sk# <= skmax# Then
  ; Calculating coefficients for mixing
  sk1# = sk# / skmax#
  sk2# = (1 - sk1#)*s
  ; Intensivity components' values
  rr = Int (sk1#*r+sk2#*r2#)
  If rr < 0 Then rr = 0 Else If rr > 255 Then rr = 255
  gg = Int (sk1# * g + sk2# * g2#)
  If gg < 0 Then gg = 0 Else If gg > 255 Then gg = 255
  bb = Int (sk1# * b + sk2# * b2#)
  If bb < 0 Then bb = 0 Else If bb > 255 Then bb = 255
  ; Drawing pixel
  WritePixel x, y, bb + (gg Shl 8) + (rr Shl 16)
 End If
 Next
Next

WaitKey

Comments

None.

Code Archives Forum