Idiom #154 Halfway between two hex color codes
Find color c, the average between colors c1, c2.
c, c1, c2 are strings of hex color codes: 7 chars, beginning with a number sign # .
Assume linear computations, ignore gamma corrections.
			using namespace std;
union rgb {
    uint32_t x;
    struct {
        uint8_t b: 8;
        uint8_t g: 8;
        uint8_t r: 8;
    };
    rgb(string s) {
        x = stoi(s, nullptr, 16);
    }
};
rgb x {c1.substr(1)}, y {c2.substr(1)};
int r {(x.r + y.r) / 2},
    g {(x.g + y.g) / 2},
    b {(x.b + y.b) / 2},
    i {(r << 16) + (g << 8) + b};
ostringstream f;
f << hex << setw(6) << setfill('0') << i;
string c {'#' + f.str()};
		
		
	using namespace std;
struct rgb {
    int r, g, b;
    rgb(string s) {
        int x {stoi(s, nullptr, 16)};
        r = (x & 0xff'00'00) >> 16;
        g = (x &    0xff'00) >>  8;
        b = (x &       0xff);
    }
};
rgb x {c1.substr(1)}, y {c2.substr(1)};
int r {(x.r + y.r) / 2},
    g {(x.g + y.g) / 2},
    b {(x.b + y.b) / 2},
    i {(r << 16) + (g << 8) + b};
string c;
sprintf(c.data(), "#%06x", i);
		
		
	using namespace std;
union rgb {
    uint32_t x;
    struct { uint8_t b, g, r; };
    rgb(string s) {
        x = stoi(s, nullptr, 16);
    }
};
rgb x {c1.substr(1)}, y {c2.substr(1)};
int r {(x.r + y.r) / 2},
    g {(x.g + y.g) / 2},
    b {(x.b + y.b) / 2},
    i {(r << 16) + (g << 8) + b};
string c;
sprintf(c.data(), "#%06x", i);
		
		
	var buf [7]byte
buf[0] = '#'
for i := 0; i < 3; i++ {
	sub1 := c1[1+2*i : 3+2*i]
	sub2 := c2[1+2*i : 3+2*i]
	v1, _ := strconv.ParseInt(sub1, 16, 0)
	v2, _ := strconv.ParseInt(sub2, 16, 0)
	v := (v1 + v2) / 2
	sub := fmt.Sprintf("%02X", v)
	copy(buf[1+2*i:3+2*i], sub)
}
c := string(buf[:])
		
		
	r1, _ := strconv.ParseInt(c1[1:3], 16, 0)
r2, _ := strconv.ParseInt(c2[1:3], 16, 0)
r := (r1 + r2) / 2
g1, _ := strconv.ParseInt(c1[3:5], 16, 0)
g2, _ := strconv.ParseInt(c2[3:5], 16, 0)
g := (g1 + g2) / 2
b1, _ := strconv.ParseInt(c1[5:7], 16, 0)
b2, _ := strconv.ParseInt(c2[5:7], 16, 0)
b := (b1 + b2) / 2
c := fmt.Sprintf("#%02X%02X%02X", r, g, b)
		
		
	StringBuilder sb = new StringBuilder("#");
for(int i=0;i<3;i++) {
  String sub1 = c1.substring(1+2*i,3+2*i);
  String sub2 = c2.substring(1+2*i,3+2*i);
  int v1 = Integer.parseInt(sub1, 16);
  int v2 = Integer.parseInt(sub2, 16);
  int v = (v1 + v2)/2;
  String sub = String.format("%02X", v);
  sb.append(sub);
}
String c = sb.toString();
		
		
	String r1 = c1.substring(1,3);
String g1 = c1.substring(3,5);
String b1 = c1.substring(5,7);
String r2 = c2.substring(1,3);
String g2 = c2.substring(3,5);
String b2 = c2.substring(5,7);
String r = String.format("%02X", (Integer.parseInt(r1, 16)+Integer.parseInt(r2, 16))/2 );
String g = String.format("%02X", (Integer.parseInt(g1, 16)+Integer.parseInt(g2, 16))/2 );
String b = String.format("%02X", (Integer.parseInt(b1, 16)+Integer.parseInt(b2, 16))/2 );
String c = "#" + r + g + b;
		
		
	var
  c1, c2: string;
  RGB1, RGB2: LongInt;
  R1, G1, B1, R2, G2, B2: Byte;
  c: TColor;
begin
  RGB1 := ColorToRGB(StrToInt(StringReplace(c1,'#','$',[])));
  RGB1 := ColorToRGB(StrToInt(StringReplace(c2,'#','$',[])));
  RedGreenBlue(RGB1, R1, G1, B1);
  RedGreenBlue(RGB2, R2, G2, B2);
  c := RGBToColor(R1+R2 div 2, G1+G2 div 2, B1+B2 div 2);
end.
		
		
	class RGB(numpy.ndarray):
  @classmethod
  def from_str(cls, rgbstr):
    return numpy.array([
      int(rgbstr[i:i+2], 16)
      for i in range(1, len(rgbstr), 2)
    ]).view(cls)
 
  def __str__(self):
    self = self.astype(numpy.uint8)
    return '#' + ''.join(format(n, 'x') for n in self)
 
c1 = RGB.from_str('#a1b1c1')
print(c1)
c2 = RGB.from_str('#1A1B1C')
print(c2)
print((c1 + c2) / 2)
		
		
	from ctypes import c_uint8 as u8
from ctypes import c_uint32 as u32
from ctypes import Structure, Union
			
		d = {'_fields_': [(x, u8) for x in 'bgr']}
Y = type('Y', (Structure,), d)
def m(_, x=0):
    Union.__init__(_, x)
    _.rgb = _.r, _.g, _.b
n = lambda _, x: _(int(x[1:], 16))
d = {'_anonymous_': ('y',),
     '_fields_': [('x', u32), ('y', Y)],
     '__init__': m,
     'parse': classmethod(n)}
Color = type('Color', (Union,), d)
c = Color()
x, y = map(Color.parse, (c1, c2))
f = lambda x: sum(x) // 2
c.r, c.g, c.b = map(f, zip(x.rgb, y.rgb))
c = f'#{c.x:06x}'