使用DrawEllipse绘制与Bitmap同尺寸的圆时边缘被裁剪的原因
为什么DrawEllipse绘制的圆边缘被裁剪了?
这个问题我太熟了,根源就在Pen的宽度和DrawEllipse的绘制逻辑上!
你用了宽度为4的Pen来画圆,但DrawEllipse的规则是:笔的中线会严格沿着你指定的Rectangle边界走。也就是说,4像素宽的笔,会有2像素落在矩形外面,2像素在矩形内部。而你的Bitmap刚好和这个矩形尺寸完全一致(80x80),那超出Bitmap范围的那2像素自然就被裁剪掉了,所以你看到的圆边缘缺了一块。
解决办法很直接,只要给Pen留出足够的绘制空间就行:把用来画圆的Rectangle尺寸调整一下——X和Y坐标各加上笔宽的一半,宽度和高度各减去整个笔宽,这样整个Pen的宽度都能被Bitmap容纳,不会超出边界。
修改后的代码如下:
Bitmap layer = new Bitmap(80, 80); using (Graphics g = Graphics.FromImage(layer)) { int penWidth = 4; using (Pen p = new Pen(Color.Black, penWidth)) { int offset = penWidth / 2; // 调整矩形,让Pen的绘制范围完全在Bitmap内部 g.DrawEllipse(p, new Rectangle(offset, offset, layer.Width - penWidth, layer.Height - penWidth)); } } pictureBox3.Size = new Size(100, 100); pictureBox3.Image = layer;
附上你提供的裁剪效果截图:
内容的提问来源于stack exchange,提问作者user3605220
相关产品推荐
相关产品推荐

