定义:
#region 根据非背景图绘制控件
/// <summary>
/// 绘制控件
/// </summary>
/// <param name="bitmap"></param>
/// <returns></returns>
private static GraphicsPath CalculateControlGraphicsPath(Bitmap bitmap)
{
GraphicsPath graphicsPath = new GraphicsPath();
Color colorTransparent = bitmap.GetPixel(0, 0);
int colOpaquePixel = 0;
for (int row = 0; row < bitmap.Height; row++)
{
colOpaquePixel = 0;
for (int col = 0; col < bitmap.Width; col++)
{
if (bitmap.GetPixel(col, row) != colorTransparent)
{
colOpaquePixel = col;
int colNext = col;
for (colNext = colOpaquePixel; colNext < bitmap.Width; colNext++)
if (bitmap.GetPixel(colNext, row) == colorTransparent)
break;
graphicsPath.AddRectangle(new Rectangle(colOpaquePixel,
row, colNext - colOpaquePixel, 1));
col = colNext;
}
}
}
return graphicsPath;
}
#endregion
使用
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
this.pictureBox1.Cursor = Cursors.Hand;
Bitmap bmpBob = (Bitmap)this.pictureBox1.Image;
GraphicsPath graphicsPath = CalculateControlGraphicsPath(bmpBob);
this.pictureBox1.Region = new Region(graphicsPath);
}