public static void ComposePixels <TSrcPixel, TDstPixel>(SpanBitmap <TSrcPixel> src, SpanBitmap <TDstPixel> dst, TRANSFORM srcXform, bool useBilinear, float opacity)
            where TSrcPixel : unmanaged, Pixel.IConvertTo
            where TDstPixel : unmanaged, Pixel.IConvertTo
        {
            int opacityQ = (int)(opacity * 256);

            void _rowProcessorNearest(Span <TDstPixel> dst, SpanQuantized8Sampler <TSrcPixel, Pixel.BGRP32> src, _RowTransformIterator srcIterator)
            {
                Pixel.BGRP32 srcPixel = default;
                Pixel.BGRP32 composer = default;

                for (int i = 0; i < dst.Length; ++i)
                {
                    srcIterator.MoveNext(out int sx, out int sy);

                    src.GetSourcePixelOrDefault(sx, sy).CopyTo(ref srcPixel);

                    if (srcPixel.A == 0)
                    {
                        continue;
                    }

                    ref var dstI = ref dst[i];

                    dstI.CopyTo(ref composer);
                    composer.SetSourceOver(srcPixel, opacityQ);
                    composer.CopyTo(ref dstI);
                }
            }
            void _rowProcessorBilinear(Span <TDstPixel> dst, SpanQuantized8Sampler <TSrcPixel, Pixel.BGRP32> src, _RowTransformIterator srcIterator)
            {
                Pixel.BGRP32 srcPixel = default;
                Pixel.BGRP32 composer = default;

                for (int i = 0; i < dst.Length; ++i)
                {
                    srcIterator.MoveNext(out int sx, out int sy, out int rx, out int ry);

                    srcPixel = src.GetSampleOrDefault(sx, sy, rx, ry);

                    if (srcPixel.A == 0)
                    {
                        continue;
                    }

                    ref var dstI = ref dst[i];

                    dstI.CopyTo(ref composer);
                    composer.SetSourceOver(srcPixel, opacityQ);
                    composer.CopyTo(ref dstI);
                }