///|
/// 标准 alpha 混合:将 `src` 以不透明度 `alpha` 叠加到 `dst` 上。
///
/// 逐通道计算:`out = (src * a + dst * (255 - a)) / 255`,
/// 输入输出均为打包 RGBA 颜色 `0xRRGGBBAA`,`alpha` 取值 0~255。
pub fn blend_pixel(dst : Int32, src : Int32, alpha : Int32) -> Int32 {
  let a = if alpha < 0 { 0 } else if alpha > 255 { 255 } else { alpha }
  let inv = 255 - a
  let dr = (dst >> 24) & 0xFF
  let dg = (dst >> 16) & 0xFF
  let db = (dst >> 8) & 0xFF
  let da = dst & 0xFF
  let sr = (src >> 24) & 0xFF
  let sg = (src >> 16) & 0xFF
  let sb = (src >> 8) & 0xFF
  let sa = src & 0xFF
  let or = (sr * a + dr * inv) / 255
  let og = (sg * a + dg * inv) / 255
  let ob = (sb * a + db * inv) / 255
  let oa = (sa * a + da * inv) / 255
  (or << 24) | (og << 16) | (ob << 8) | oa
}