当前位置:编程学习 > C#/ASP.NET >>

请帮忙分析这段c#像素处理语句

       public static void RenderOneToOne(Su易做图ce dst, Su易做图ce source, Point offset)
        {
            unsafe
            {
                Rectangle srcRect = new Rectangle(offset, dst.Size);
                srcRect.Intersect(source.Bounds);

                for (int dstRow = 0; dstRow < srcRect.Height; ++dstRow)
                {
                    ColorBgra* dstRowPtr = dst.GetRowAddressUnchecked(dstRow);
                    ColorBgra* srcRowPtr = source.GetPointAddressUnchecked(offset.X, dstRow + offset.Y);

                    int dstCol = offset.X;
                    int dstColEnd = offset.X + srcRect.Width;
                    int checkerY = dstRow + offset.Y;

                    while (dstCol < dstColEnd)
                    {
                        int b = srcRowPtr->B;
                        int g = srcRowPtr->G;
                        int r = srcRowPtr->R;
                        int a = srcRowPtr->A;

                        // Blend it over the checkerboard background
                        //这里+后面大于191就会出现红色叉子
                        int v = (((dstCol ^ checkerY) & 8) << 3) + 191;
                        a = a + (a >> 7);
                        int vmia = v * (256 - a);

                        r = ((r * a) + vmia) >> 8;
                        g = ((g * a) + vmia) >> 8;
                        b = ((b * a) + vmia) >> 8;

                        dstRowPtr->Bgra = (uint)b + ((uint)g << 8) + ((uint)r << 16) + ((uint)255 << 24);
                        ++dstRowPtr;
                        ++srcRowPtr;
                        ++dstCol;
                    }
                }
            }
        }


这个方法的效果是把source的图像与棋盘格子的图像混合到一起,放到dst里面,如图所示。我想问这个过程的实现是怎样的逻辑呢?这个问题不重要,重要的是想知道怎么样把和这种格子混合变成没有画画的地方让它透明而不是出现棋盘格子,求啊! --------------------编程问答-------------------- dstRowPtr->Bgra
这里b=blue g=green r=red a=alpha
所谓alpha,就是透明度。混合的时候,本颜色和原有颜色的分量靠它指定。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,