ごちゃごちゃしてますがこんな感じになっています。
else if (pixelinfo.bpp_ == 16) {
  LONG srcpitch = srcddsd.lPitch / 2, dstpitch = dstddsd.lPitch / 2;
  WORD* const srcptr = static_cast<WORD*>(srcddsd.lpSurface);
  WORD* const dstptr = static_cast<WORD*>(dstddsd.lpSurface);
  DWORD srcclr0=0, dstclr0=0, newclr0=(*blendfunc)(dstclr0, srcclr0, alpha);

  for (int sy = srcrect2.top; sy < srcrect2.bottom; ++sy) {
    for (int sx = srcrect2.left; sx < srcrect2.right; ++sx) {
      DWORD srcclr = srcptr[srcpitch * sy + sx];

      if (!trans || srcclr != clrkey) {
        int dx = dstx + (sx - srcrect->left);
        int dy = dsty + (sy - srcrect->top);
        WORD* dp = dstptr + dstpitch * dy + dx;
        DWORD dstclr = *dp;

        if (srcclr == srcclr0 && dstclr == dstclr0) {
          *dp = newclr0;
        }
        else {
          *dp = (*blendfunc)(dstclr, srcclr, alpha); //(1)
          srcclr0 = srcclr;
          dstclr0 = dstclr;
          newclr0 = *dp;     //(2)
        }
            :
(1)の部分を newclr0 = (*blendfunc)(dstclr, srcclr, alpha);
(2)の部分を *dp = newclr0;
と変えてコンパイルしているだけなのですが、
何かお分かりになりましたらよろしくお願いします。