zoukankan      html  css  js  c++  java
  • C# 将透明图片的非透明区域转换成Region

    以下代码实现将一张带透明度的png图片的非透明部分转换成Region输出

            /// <summary>
            /// 根据图片得到一个图片非透明部分的区域
            /// </summary>
            /// <param name="bckImage"></param>
            /// <returns></returns>
            private unsafe Region GetRegion(Bitmap bckImage)
            {
                GraphicsPath path = new GraphicsPath();
                int w = bckImage.Width;
                int h = bckImage.Height;
                BitmapData bckdata = null;
                try
                {
                    bckdata = bckImage.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
                    uint* bckInt = (uint*)bckdata.Scan0;
                    for (int j = 0; j < h; j++)
                    {
                        for (int i = 0; i < w; i++)
                        {
                            if ((*bckInt & 0xff000000) != 0)
                            {
                                path.AddRectangle(new Rectangle(i, j, 1, 1));
                            }
                            bckInt++;
                        }
                    }
                    bckImage.UnlockBits(bckdata); bckdata = null;
                }
                catch
                {
                    if (bckdata != null)
                    {
                        bckImage.UnlockBits(bckdata);
                        bckdata = null;
                    }
                }
                Region region = new System.Drawing.Region(path);
                path.Dispose(); path = null; 
                return region;
            }

    以上方法小图还可以,大图速度上就显得慢了.....

  • 相关阅读:
    数据结构与算法4—队列
    栈的应用——括号匹配
    迷宫求解
    python的socket编程
    数据结构与算法3—栈
    数据结构与算法2—链表
    数据结构与算法1—线性表
    增量解析
    ElementTree类
    节点序列化
  • 原文地址:https://www.cnblogs.com/mqxs/p/3353571.html
Copyright © 2011-2022 走看看