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

  • 问题

  • 思路是这样的,

    1. 首先根据图片获取GraphicsPath

    private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
                    // 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.
                    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)
                        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)
                                // 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)
                                , "BitmapRegion"
                                , "private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)"
                               , ex.Message);

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



    2015年10月12日 3:26