Bitmap pic = new Bitmap(newW, newH);
Graphics g = Graphics.FromImage(pic);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingQuality = CompositingQuality.HighQuality;
//绘图操作
..........
//
g.dispose();
this.backgroudImage=pic;
每次缩放图片都执行上面的代码,经过几次缩放后出现错误,图片变成了两条交叉红直线,没有报异常,请问哪位大神知道原因?
Graphics g = Graphics.FromImage(pic);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingQuality = CompositingQuality.HighQuality;
//绘图操作
..........
//
g.dispose();
this.backgroudImage=pic;
每次缩放图片都执行上面的代码,经过几次缩放后出现错误,图片变成了两条交叉红直线,没有报异常,请问哪位大神知道原因?
Bitmap pic = new Bitmap(this.Width, this.Height);
Graphics g = Graphics.FromImage(pic);
g.SmoothingMode = SmoothingMode.AntiAlias;
g.CompositingQuality = CompositingQuality.HighQuality;
//鼠标点在新界面的坐标
newMouseX = px * ratio;
newMouseY = py * ratio;
#region 缩放后重绘图形 #region 重绘直线
if (dxfReadOrWrite.lineList.Count > 0)
{
foreach (DxfLine dLine in dxfReadOrWrite.lineList)
{
System.Drawing.Pen penLine = new System.Drawing.Pen(ColorIndexContrastTable.ColorIndexList[dLine.ColorIndex], 0);//画笔
dLine.ScaleStartX = (dLine.ScaleStartX - px) * ratio + newMouseX;
dLine.ScaleEndX = (dLine.ScaleEndX - px) * ratio + newMouseX;
dLine.ScaleStartY = (dLine.ScaleStartY - py) * ratio + newMouseY;
dLine.ScaleEndY = (dLine.ScaleEndY - py) * ratio + newMouseY;
g.DrawLine(penLine, new PointF((float)dLine.ScaleStartX, (float)dLine.ScaleStartY), new PointF((float)dLine.ScaleEndX, (float)dLine.ScaleEndY));
}
}
#endregion #region 重绘圆弧
if (dxfReadOrWrite.arcList.Count > 0)
{
foreach (DxfArc dArc in dxfReadOrWrite.arcList)
{
dArc.ScaleCenterX = (dArc.ScaleCenterX - px) * ratio + newMouseX;
dArc.ScaleCenterY = (dArc.ScaleCenterY - py) * ratio + newMouseY; dArc.ScaleRadius = (float)dArc.ScaleRadius * ratio;
float lefttop_x = (float)(dArc.ScaleCenterX - dArc.ScaleRadius);
float lefttop_y = (float)(dArc.ScaleCenterY - dArc.ScaleRadius);
System.Drawing.Pen penArc = new System.Drawing.Pen(ColorIndexContrastTable.ColorIndexList[dArc.ColorIndex], 0);//画笔
float _angle = (float)((dArc.AngleEnd - dArc.AngleStart));
float swapangle = float.MinValue;
if (_angle > 0)
{
swapangle = _angle;
}
if (_angle < 0)
{
swapangle = 360 + _angle;
}
g.DrawArc(penArc, new RectangleF(lefttop_x, lefttop_y, (float)(2 * dArc.ScaleRadius), (float)(2 * dArc.ScaleRadius)), (float)(360 - dArc.AngleEnd), swapangle);
}
}
#endregion #region 重绘圆
//圆的中心点相对应鼠标点的距离进行等比例放大/缩小
if (dxfReadOrWrite.circleList.Count > 0)
{
foreach (DxfCircle dCircle in dxfReadOrWrite.circleList)
{
System.Drawing.Pen penCircle = new System.Drawing.Pen(ColorIndexContrastTable.ColorIndexList[dCircle.ColorIndex], 0);//画笔 dCircle.ScaleCircleCenterX = (dCircle.ScaleCircleCenterX - px) * ratio + newMouseX;
dCircle.ScaleCircleCenterY = (dCircle.ScaleCircleCenterY - py) * ratio + newMouseY; dCircle.ScaleRadius = (float)dCircle.ScaleRadius * ratio;
float lefttop_x = (float)(dCircle.ScaleCircleCenterX - dCircle.ScaleRadius);
float lefttop_y = (float)(dCircle.ScaleCircleCenterY - dCircle.ScaleRadius);
g.DrawArc(penCircle, new RectangleF(lefttop_x, lefttop_y, (float)(2 * dCircle.ScaleRadius), (float)(2 * dCircle.ScaleRadius)), 0, 360); }
}
#endregion #region 重绘填充
if (dxfReadOrWrite.hatchList.Count > 0)
{
foreach (DxfHatch dHatch in dxfReadOrWrite.hatchList)
{
for (int i = 0; i < 4; i++)
{
dHatch.ScalePointX[i] = (dHatch.ScalePointX[i] - px) * ratio + newMouseX;
dHatch.ScalePointY[i] = (dHatch.ScalePointY[i] - py) * ratio + newMouseY;
}
float fillwidth = (float)Math.Abs(dHatch.ScalePointX[3] - dHatch.ScalePointX[2]);
float fillheight = (float)Math.Abs(dHatch.ScalePointY[1] - dHatch.ScalePointY[2]);
float lefttop_x = (float)dHatch.ScalePointX[1];
float lefttop_y = (float)dHatch.ScalePointY[1];
System.Drawing.Brush _BrushHatch = new SolidBrush(ColorIndexContrastTable.ColorIndexList[dHatch.ColorIndex]);
g.FillRectangle(_BrushHatch, new RectangleF(lefttop_x, lefttop_y, fillwidth, fillheight));
} }
#endregion
g.dispose();
this.backgroundImage=pic;
#endregion