none
根据图片截取控件出现毛刺 RRS feed

  • 问题

  • 思路是这样的,

    1. 首先根据图片获取GraphicsPath

    private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
            {
                try
                {
                    // Create GraphicsPath for our bitmap calculation
                    //创建 GraphicsPath
                    GraphicsPath graphicsPath = new GraphicsPath();
                    // Use the top left pixel as our transparent color
                    //使用左上角的一点的颜色作为我们透明色
                    Color colorTransparent = bitmap.GetPixel(0, 0);
                    // This is to store the column value where an opaque pixel is first found.
                    // This value will determine where we start scanning for trailing opaque pixels.
                    //第一个找到点的X
                    int colOpaquePixel = 0;
                    // Go through all rows (Y axis)
                    // 偏历所有行(Y方向)
                    for (int row = 0; row < bitmap.Height; row++)
                    {
                        // Reset value
                        //重设
                        colOpaquePixel = 0;
                        // Go through all columns (X axis)
                        //偏历所有列(X方向)
                        for (int col = 0; col < bitmap.Width; col++)
                        {
                            // If this is an opaque pixel, mark it and search for anymore trailing behind
                            //如果是不需要透明处理的点则标记,然后继续偏历
                            if (bitmap.GetPixel(col, row) != colorTransparent)
                            {
                                // Opaque pixel found, mark current position
                                //记录当前
                                colOpaquePixel = col;
                                // Create another variable to set the current pixel position
                                //建立新变量来记录当前点
                                int colNext = col;
                                // Starting from current found opaque pixel, search for anymore opaque pixels
                                // trailing behind, until a transparent   pixel is found or minimum width is reached
                                ///从找到的不透明点开始,继续寻找不透明点,一直到找到或则达到图片宽度
                                for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++)
                                    if (bitmap.GetPixel(colNext, row) == colorTransparent)
                                        break;
                                // Form a rectangle for line of opaque   pixels found and add it to our graphics path
                                //将不透明点加到graphics path
                                graphicsPath.AddRectangle(new Rectangle(colOpaquePixel, row, colNext - colOpaquePixel, 1));
                                // No need to scan the line of opaque pixels just found
                                col = colNext;
                            }
                        }
                    }
                    // Return calculated graphics path
                    return graphicsPath;
                }
                catch (Exception ex)
                {
                    LTLibrary.Debug.DebugTooler.Debug("10058.5"
                                , "BitmapRegion"
                                , "private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)"
                               , ex.Message);
                    throw;
                }
            }

    2. 为控件设置形状control.Region= new Region(graphicsPath);

    但是却出现毛刺:

    请教是什么原因导致该问题呢?

    2015年10月12日 3:26

全部回复