public override void Draw(Graphics g) { g.RotateTransform((float)-mRotation); Point[] p = new Point[]{mImgSec.Location}; g.Transform.TransformPoints(p); if(g.Transform != new System.Drawing.Drawing2D.Matrix() && p[0] == mImgSec.Location) throw new OperationCanceledException("Ellipse.Draw: the rotation of the array affects the referenced items in that array: fix"); g.FillEllipse(new SolidBrush(this.mImgSec.MedianCol), new System.Drawing.Rectangle(p[0], new Size((int)mEllWidth, (int)mEllHeight))); g.RotateTransform((float)mRotation); base.Draw(g); }
public void Draw(Graphics g) { float dL = length / 2.0f; float dW = width / 2.0f; g.TranslateTransform(x + dL, y + dW); g.RotateTransform(angle); g.TranslateTransform(-dL, -dW); g.DrawRectangle(new Pen(Color.Black), 0, 0, length, width); g.TranslateTransform(dL, dW); g.RotateTransform(-angle); g.TranslateTransform(-x - dL, -y - dW); }
public override void OnRender(Graphics g) { #if !PocketPC if(!Bearing.HasValue) { g.DrawImageUnscaled(Resources.shadow50, LocalPosition.X, LocalPosition.Y); } g.TranslateTransform(ToolTipPosition.X, ToolTipPosition.Y); if(Bearing.HasValue) { g.RotateTransform(Bearing.Value - Overlay.Control.Bearing); g.FillPolygon(Brushes.Lime, Arrow); } g.ResetTransform(); if(!Bearing.HasValue) { g.DrawImageUnscaled(Resources.bigMarkerGreen, LocalPosition.X, LocalPosition.Y); } #else DrawImageUnscaled(g, Resources.shadow50, LocalPosition.X, LocalPosition.Y); DrawImageUnscaled(g, Resources.marker, LocalPosition.X, LocalPosition.Y); #endif }
private void RenderSymbols( Graphics g ) { float radius = _textureSize / 2 * 0.84f; float centerX = _textureSize / 2; float centerY = _textureSize / 2; var symbols = GetSymbols(); using ( var font = new Font( "Meroitic - Hieroglyphics", _fontSize, FontStyle.Bold ) ) { for ( int index = 0; index < _symbolCount; index++ ) { char character = symbols[index]; float arc = 360f / _symbolCount; float thetaDegrees = arc * index; float thetaRadians = AsRadians( thetaDegrees ); var characterSize = MeasureCharacter( g, font, character ); var centerPoint = new PointF( centerX - characterSize.Width / 2, centerY - characterSize.Height / 2 ); float x = centerX + (float) Math.Cos( thetaRadians ) * radius; float y = centerY + (float) Math.Sin( thetaRadians ) * radius; g.TranslateTransform( x, y ); g.RotateTransform( thetaDegrees + 90 ); g.TranslateTransform( -x, -y ); g.TranslateTransform( -( characterSize.Width / 2 ), -( characterSize.Height / 2 ) ); g.DrawString( character.ToString(), font, _greenBrush, x, y ); g.ResetTransform(); } } }
public override void OnRender(Graphics g) { System.Drawing.Drawing2D.Matrix temp = g.Transform; g.TranslateTransform(LocalPosition.X, LocalPosition.Y); g.RotateTransform(-MainMap.Bearing); try { g.RotateTransform(bearing); } catch { } g.DrawImageUnscaled(icon, icon.Width / -2, icon.Height / -2); g.Transform = temp; }
private void DrawRobot(Robot r, Graphics g) { var frame = (Math.Abs(r.Steps / (int)(0.02 * BPS)) + int.MaxValue / 2) % 8; g.TranslateTransform((float)r.X, (float)r.Y); g.RotateTransform((float)r.Angle); g.DrawImage(RobotImage, new Rectangle(-16, -16, 32, 32), new Rectangle(0 + 32 * frame, 0, 32, 32), GraphicsUnit.Pixel); g.RotateTransform((float)r.CannonAngle); g.DrawImage(CannonImage, new Rectangle(-7, -7, 24, 14)); g.RotateTransform(-(float)r.CannonAngle); g.RotateTransform(-(float)r.Angle); //g.FillPolygon(Brushes.LightGray, new[] { // new PointF((float)Math.Round(-15f), (float)Math.Round(-12f)), // new PointF((float)Math.Round(15f), (float)Math.Round(-12f)), // new PointF((float)Math.Round(15f), (float)Math.Round(-9f)), // new PointF((float)Math.Round(-15f), (float)Math.Round(-9f)), //}); g.FillPolygon(Brushes.Red, new[] { new PointF((float)Math.Round(-15f), (float)Math.Round(-12f)), new PointF((float)Math.Round(-15f + 30 * Math.Max(0, r.HP)), (float)Math.Round(-12f)), new PointF((float)Math.Round(-15f + 30 * Math.Max(0, r.HP)), (float)Math.Round(-9f)), new PointF((float)Math.Round(-15f), (float)Math.Round(-9f)), }); //g.FillPolygon(Brushes.Blue, new[] { // new PointF((float)Math.Round(-15f), (float)Math.Round(-9f)), // new PointF((float)Math.Round(-15f + 30 * Math.Max(0, 1 - (double)r.FireCooldown / GameState.FIRE_COOLDOWN)), (float)Math.Round(-9f)), // new PointF((float)Math.Round(-15f + 30 * Math.Max(0, 1 - (double)r.FireCooldown / GameState.FIRE_COOLDOWN)), (float)Math.Round(-7f)), // new PointF((float)Math.Round(-15f), (float)Math.Round(-7f)), //}); g.TranslateTransform(-(float)r.X, -(float)r.Y); }
public void Draw (Graphics graphics, Route route, bool atEnd) { if (graphics == null) return; if (route == null) return; GraphicsState state = graphics.Save(); float direction = 0; PointF pos = default(PointF); if (atEnd) { pos = route.GetEndPoint(); direction = ConvertDirection(route.GetEndDirection()); } else { pos = route.GetStartPoint(); direction = ConvertDirection(route.GetStartDirection()); } // In matrix math, the correct way is to put rotation BEFORE // translation. However, the simple transformation maethods of // GDI+ works in "Prepend" mode, which reverses the order of // operations. graphics.TranslateTransform(pos.X, pos.Y); graphics.RotateTransform(direction); Paint(graphics); graphics.Restore(state); }
/// <summary> /// Renders a label to the map. /// </summary> /// <param name="graphics">Graphics reference</param> /// <param name="labelPoint">Label placement</param> /// <param name="offset">Offset of label in screen coordinates</param> /// <param name="font">Font used for rendering</param> /// <param name="forecolor">Font forecolor</param> /// <param name="backcolor">Background color</param> /// <param name="halo">Color of halo</param> /// <param name="rotation">Text rotation in degrees</param> /// <param name="text">Text to render</param> /// <param name="viewport"></param> public static void DrawLabel(Graphics graphics, Point labelPoint, Offset offset, Styles.Font font, Styles.Color forecolor, Styles.Brush backcolor, Styles.Pen halo, double rotation, string text, IViewport viewport, StyleContext context) { SizeF fontSize = graphics.MeasureString(text, font.ToGdi(context)); //Calculate the size of the text labelPoint.X += offset.X; labelPoint.Y += offset.Y; //add label offset if (Math.Abs(rotation) > Constants.Epsilon && !double.IsNaN(rotation)) { graphics.TranslateTransform((float)labelPoint.X, (float)labelPoint.Y); graphics.RotateTransform((float)rotation); graphics.TranslateTransform(-fontSize.Width / 2, -fontSize.Height / 2); if (backcolor != null && backcolor.ToGdi(context) != Brushes.Transparent) graphics.FillRectangle(backcolor.ToGdi(context), 0, 0, fontSize.Width * 0.74f + 1f, fontSize.Height * 0.74f); var path = new GraphicsPath(); path.AddString(text, new FontFamily(font.FontFamily), (int)font.ToGdi(context).Style, font.ToGdi(context).Size, new System.Drawing.Point(0, 0), null); if (halo != null) graphics.DrawPath(halo.ToGdi(context), path); graphics.FillPath(new SolidBrush(forecolor.ToGdi()), path); //g.DrawString(text, font, new System.Drawing.SolidBrush(forecolor), 0, 0); } else { if (backcolor != null && backcolor.ToGdi(context) != Brushes.Transparent) graphics.FillRectangle(backcolor.ToGdi(context), (float)labelPoint.X, (float)labelPoint.Y, fontSize.Width * 0.74f + 1, fontSize.Height * 0.74f); var path = new GraphicsPath(); //Arial hack path.AddString(text, new FontFamily("Arial"), (int)font.ToGdi(context).Style, (float)font.Size, new System.Drawing.Point((int)labelPoint.X, (int)labelPoint.Y), null); if (halo != null) graphics.DrawPath(halo.ToGdi(context), path); graphics.FillPath(new SolidBrush(forecolor.ToGdi()), path); //g.DrawString(text, font, new System.Drawing.SolidBrush(forecolor), LabelPoint.X, LabelPoint.Y); } }
public override void onManagedDraw(Graphics graphics) { graphics.TranslateTransform (this.CenterX, this.CenterY); graphics.RotateTransform (90 + this.Angle / (float)Math.PI * 180); graphics.TranslateTransform (-this.CenterX, -this.CenterY); base.onManagedDraw (graphics); graphics.ResetTransform (); }
public override void OnRender(Graphics g) { double width = (Overlay.Control.MapProvider.Projection.GetDistance(Overlay.Control.FromLocalToLatLng(0, 0), Overlay.Control.FromLocalToLatLng(Overlay.Control.Width, 0)) * 1000.0); double height = (Overlay.Control.MapProvider.Projection.GetDistance(Overlay.Control.FromLocalToLatLng(0, 0), Overlay.Control.FromLocalToLatLng(Overlay.Control.Height, 0)) * 1000.0); double m2pixelwidth = Overlay.Control.Width / width; double m2pixelheight = Overlay.Control.Height / height; Matrix temp = g.Transform; g.TranslateTransform(LocalPosition.X + RectHeight, LocalPosition.Y + RectWidth); g.RotateTransform(-Overlay.Control.Bearing); base.OnRender(g); if (RectHeight == 0 || Overlay.Control == null) return; // if we have drawn it, then keep that color if (!initcolor.HasValue) Color = Color.White; //wprad = 300; // undo autochange in mouse over // if (Pen.Color == Color.Blue) // Pen.Color = Color.White; //GPoint loc = new GPoint((int)(LocalPosition.X - (m2pixelwidth * RectWidth * 2)), LocalPosition.Y);// MainMap.FromLatLngToLocal(wpradposition); GPoint loc = new GPoint((int)(LocalPosition.X - (m2pixelwidth * RectWidth)), (int)(LocalPosition.Y - (m2pixelheight * RectHeight)));// MainMap.FromLatLngToLocal(wpradposition); double direction = LandingDirection; //mine int x = Offset.X - (int)(Math.Abs(loc.X - (int)LocalPosition.X) / 2); int y = Offset.Y - (int)(Math.Abs(loc.Y - (int)LocalPosition.Y) / 2); int widtharc = (int)Math.Abs(loc.X - LocalPosition.X); int heightarc = (int)Math.Abs(loc.Y - LocalPosition.Y); if (widtharc > 0) { try { g.RotateTransform((int)LandingDirection); } catch { } //draw circle //g.DrawArc(Pen, new System.Drawing.Rectangle(x, y, widtharc, heightarc), 0, 360); //g.FillPie(new SolidBrush(Color.FromArgb(25, FillColor)), x, y, widtharc, heightarc, 0, 360); g.DrawRectangle(Pen, x, y, RectWidth * (int)m2pixelwidth, RectHeight * (int)m2pixelheight); g.FillRectangle(new SolidBrush(Color.FromArgb(25, FillColor)), x, y, RectWidth * (int)m2pixelwidth, RectHeight * (int)m2pixelheight); g.Transform = temp; } }
public override void Draw(Graphics g, GraphPane pane) { SizeF size; PointF pos; float x, y1, y2, y3; string label; //Draw Axis Title if (mTitle.Visible) { using (Brush brush = new SolidBrush(mTitle.Color)) { if (mTitle.Orientation == Orientation.Vertical) { g.RotateTransform(-90); g.TranslateTransform(-mPane.ClientRectangle.Height, 0); size = g.MeasureString(mTitle.Text, mTitle.Font); pos = new PointF(mTitle.Padding, mRect.Left + mRect.Width / 2 - size.Height / 2); g.DrawString(mTitle.Text, mTitle.Font, brush, pos); g.ResetTransform(); } else { size = g.MeasureString(mTitle.Text, mTitle.Font); pos = new PointF(mRect.Left + (mRect.Width / 2 - size.Width / 2), mRect.Top + mTitle.Padding); if (mLabels.Visible) pos.Y += (mLabels.Font.Height + (mLabels.Padding * 2)); g.DrawString(mTitle.Text, mTitle.Font, brush, pos); } } } //Draw Minor Gridlines and Marks y1 = mRect.Top - mMinorMark.Size; y2 = mRect.Top; for (double dx = Minimum; dx <= Maximum; dx += mMinorStep) { x = mRect.X + (float)((dx - mMinimum) * mScale); if (mMinorMark.Visible) g.DrawLine(mMinorMark.Pen, x, y1, x, y2); } //Draw Major Gridlines, Marks and Labels y1 = mRect.Top - mMajorMark.Size; y2 = mRect.Top; y3 = y2 + mLabels.Padding; using (Brush b = new SolidBrush(mLabels.Color)) { for (double dx = Minimum; dx <= Maximum; dx += mMajorStep) { x = mRect.X + (float)((dx - mMinimum) * mScale); if (mMajorMark.Visible) g.DrawLine(mMajorMark.Pen, x, y1, x, y2); if (mLabels.Visible) { label = FormatLabel(dx); size = g.MeasureString(label, mLabels.Font); x = x - size.Width / 2; if (mPane.ClientRectangle.Contains(x, y3) && mPane.ClientRectangle.Contains(x + size.Width, y3 + size.Height)) g.DrawString(label, mLabels.Font, b, x, y3); } } } //Draw The Axis g.DrawLine(mPen, mRect.Left, mRect.Top, mRect.Right, mRect.Top); }
private void DrawBullet(Bullet b, Graphics g) { if (b.Exploding && b.ExplosionTick > .5 * BPS) return; var frame = (Math.Abs(b.ExplosionTick / (int)(.5 / 16 * BPS)) + int.MaxValue / 2) % 16; g.TranslateTransform((float)b.X, (float)b.Y); if (b.Exploding) { g.DrawImage(ExplosionImage, new Rectangle(-12, -12, 24, 24), new Rectangle(0 + 24 * (frame % 4), 0 + 24 * (frame / 4), 24, 24), GraphicsUnit.Pixel); } else { g.RotateTransform((float)b.Angle); g.DrawImage(BulletImage, new Rectangle(-2, -2, 13, 5)); g.RotateTransform(-(float)b.Angle); } g.TranslateTransform(-(float)b.X, -(float)b.Y); }
public void paint(Graphics g) { int Xpos = (int)(xpos * frmKeyboard.width); int Ypos = (int)(ypos * frmKeyboard.height); int size = frmKeyboard.height / 10; g.TranslateTransform(Xpos,Ypos); g.RotateTransform((float)(angle/Math.PI*180.0f)); g.TranslateTransform(-1*Xpos,-1*Ypos); g.FillRectangle(black, new Rectangle(Xpos-size/2,Ypos-size/2,size,size)); g.TranslateTransform(Xpos,Ypos); g.RotateTransform(-1*(float)(angle/Math.PI*180.0f)); g.TranslateTransform(-1*Xpos,-1*Ypos); Font font = new Font("Arial", 10.0f); g.DrawString(fiducial_id+"",font, white, new PointF(Xpos-10,Ypos-10)); }
public override void Draw(Graphics g, GraphPane pane) { SizeF size; PointF pos; float y, x1, x2, x3; string label; //Draw Axis Title if (mTitle.Visible) { using (Brush b = new SolidBrush(mTitle.Color)) { if (mTitle.Orientation == Orientation.Vertical) { g.RotateTransform(-90); g.TranslateTransform(-mRect.Height, 0); size = g.MeasureString(mTitle.Text, mTitle.Font); pos = new PointF(mRect.Height / 2 - size.Width / 2, mRect.Left + mTitle.Padding); g.DrawString(mTitle.Text, mTitle.Font, b, pos); g.ResetTransform(); } else { size = g.MeasureString(mTitle.Text, mTitle.Font); pos = new PointF(mRect.Left + mTitle.Padding, mRect.Height / 2 - size.Width / 2); g.DrawString(mTitle.Text, mTitle.Font, b, pos); } } } //Draw Minor Grid and Mark x1 = mRect.Right + mMinorMark.Size; x2 = x1 - mMinorMark.Size; for (double dy = Minimum; dy < Maximum; dy += mMinorStep) { y = mRect.Bottom - (float)((dy - mMinimum) * mScale); if (mMinorMark.Visible) g.DrawLine(mMinorMark.Pen, x1, y, x2, y); } //Draw Major Gridlines, Marks and Labels x1 = mRect.Right + mMajorMark.Size; x2 = x1 - mMajorMark.Size; using (Brush b = new SolidBrush(mLabels.Color)) { for (double dy = Minimum; dy <= Maximum; dy += mMajorStep) { y = mRect.Bottom - (float)((dy - mMinimum) * mScale); if (mMajorMark.Visible) g.DrawLine(mMajorMark.Pen, x1, y, x2, y); if (mLabels.Visible) { label = dy.ToString(mLabels.Format); size = g.MeasureString(label, mLabels.Font); y = y - size.Height / 2; x3 = x2 - (size.Width + mLabels.Padding); if (mPane.ClientRectangle.Contains(x3, y) && mPane.ClientRectangle.Contains(x3, y + size.Height)) g.DrawString(label, mLabels.Font, b, x3, y); } } } //Draw The Axis g.DrawLine(mPen, mRect.Right, mRect.Top, mRect.Right, mRect.Bottom); }
public void Render(Graphics g) { if (finish != null) { Matrix m = g.Transform; g.TranslateTransform((float)(state.Position.X / CarModel.MM_PER_PIXEL + CarModel.OFFSET_X), (float)(state.Position.Y / CarModel.MM_PER_PIXEL + CarModel.OFFSET_Y)); g.RotateTransform((float)(state.Angle * 180 / Math.PI + 90)); g.DrawImage(finish, new Point((int)(-finish.Width / 1.5), (int)(-finish.Height / 1.5))); g.Transform = m; } if ((selinside != 0) || (seloutside != 0)) { Pen p = new Pen(Color.Black, 1); int x = (int)(state.Position.X / CarModel.MM_PER_PIXEL + CarModel.OFFSET_X); int y = (int)(state.Position.Y / CarModel.MM_PER_PIXEL + CarModel.OFFSET_Y); int r = finish.Width / 2; int x2 = (int)(state.Position.X / CarModel.MM_PER_PIXEL + CarModel.OFFSET_X); int y2 = (int)(state.Position.Y / CarModel.MM_PER_PIXEL + CarModel.OFFSET_Y); int r2 = finish.Width / 2 + OUT_WIDTH; if (selinside == 1) { Pen p2 = new Pen(Color.FromArgb(64,255,255,255), r); g.DrawEllipse(p2, x - r/2, y - r/2, r, r); } if (seloutside == 1) { int w = r2-r; Pen p2 = new Pen(Color.FromArgb(64, 255, 255, 255), w); g.DrawEllipse(p2, x2 - r2 + w / 2, y2 - r2 + w / 2, 2 * r2 - w, 2 * r2 - w); } g.DrawEllipse(p, x - r, y - r, 2 * r, 2 * r); g.DrawEllipse(p, x2 - r2, y2 - r2, 2 * r2, 2 * r2); if (selinside == 2) { Pen p2 = new Pen(Color.FromArgb(64, 255, 255, 255), r); g.DrawEllipse(p2, x - r / 2, y - r / 2, r, r); p = new Pen(Color.White, 4); g.DrawEllipse(p, x - r, y - r, 2 * r, 2 * r); } if (seloutside == 2) { int w = r2 - r; Pen p2 = new Pen(Color.FromArgb(64, 255, 255, 255), w); g.DrawEllipse(p2, x2 - r2 + w / 2, y2 - r2 + w / 2, 2 * r2 - w, 2 * r2 - w); p = new Pen(Color.White, 4); g.DrawEllipse(p, x2 - r2, y2 - r2, 2 * r2, 2 * r2); } } }
private void DrawElement(Graphics g, Act2DMapLayoutObject.Element e) { var bitmap = file.CreateBitmapForResource(e.resourceID); if (bitmap == null) return; g.TranslateTransform(e.x, e.y); g.TranslateTransform(bitmap.Width * 0.5f, bitmap.Height * 0.5f); g.RotateTransform(e.rotate); g.ScaleTransform(e.scale_x, e.scale_y); g.TranslateTransform(-bitmap.Width * 0.5f, -bitmap.Height * 0.5f); g.DrawImage(bitmap, new PointF(0.0f, 0.0f)); }
private void TestDraw(Graphics g, bool flip, bool rotate) { Matrix matrix = g.Transform; if (flip) g.ScaleTransform(1, -1); if (rotate) g.RotateTransform(90); g.DrawRectangle(Pens.Red, 16, 32, 100, 40); g.DrawString("Testing 1234567890", Font, Brushes.Red, 24, 48); g.Transform = matrix; }
public void Draw(Graphics g) { g.ResetTransform(); g.ScaleTransform(1 + (float)Math.Cos(angle/200f)/1f, 1+ (float)Math.Cos(angle/200f)/1f); g.TranslateTransform(g.VisibleClipBounds.Width / 2f, g.VisibleClipBounds.Height / 2f); angle += 10; g.RotateTransform(angle); g.DrawPolygon(new Pen(new SolidBrush(Color.Black), 3), vertices); }
public void DrawTile(Graphics graph) { var pointsByColors = this.GetAllBordersPoints(); var containerState = graph.BeginContainer(); graph.RotateTransform(90 * (int)this.Rotation); this.DrawPoints(graph, pointsByColors); this.DrawText(graph); graph.EndContainer(containerState); }
public void Render(Graphics graphics, int tileIndex, int x, int y, Color tint, float rotate = 0) { var imageAttrs = new ImageAttributes(); var m = new ColorMatrix(new float[][] { new float[] {tint.R / 255.0f, 0, 0, 0, 0 }, new float[] {0, tint.G / 255.0f, 0, 0, 0 }, new float[] {0, 0, tint.B / 255.0f, 0, 0 }, new float[] {0, 0, 0, tint.A / 255.0f, 0 }, new float[] {0, 0, 0, 0, 1 } }); imageAttrs.SetColorMatrix(m); var tileBitmap = new Bitmap(Width, Height); // isolate the tile into it's own bitmap for rotation using (var g2 = Graphics.FromImage(tileBitmap)) { g2.DrawImage(_bitmap, 0, 0, _tiles[tileIndex], GraphicsUnit.Pixel); } graphics.RotateTransform(OpenTK.MathHelper.DegreesToRadians(rotate)); graphics.DrawImage(tileBitmap, new Rectangle(x, y, Width, Height), 0, 0, Width, Height, GraphicsUnit.Pixel, imageAttrs); graphics.RotateTransform(OpenTK.MathHelper.DegreesToRadians(-rotate)); }
/// <summary> /// Apply the rotation /// </summary> /// <param name="p_g">Graphic object</param> /// <param name="p_point">Location where to draw object</param> /// <param name="p_bitmap">Reference to bitmap to draw on</param> public virtual void ApplyAlteration(Graphics p_g, Point p_point, ref Bitmap p_bitmap) { p_g.TranslateTransform((float)(p_point.X), (float)(p_point.Y)); // Rotate desired degrees p_g.RotateTransform((float)rotation * -1); // Move the origin back to where it belongs while it is rotated p_g.TranslateTransform((float)(p_point.X) * -1, (float)(p_point.Y) * -1); rotation += angle; if (rotation > 360) rotation -= 360; }
public override void Draw(RectangleF dirtyRect) { Graphics g = new Graphics(); // Create a pen object: Pen aPen = new Pen(Color.Blue, 4); // Set line caps and dash style: aPen.StartCap = LineCap.Flat; aPen.EndCap = LineCap.ArrowAnchor; aPen.DashStyle = DashStyle.Dot; aPen.DashOffset = 50; //g.ScaleTransform(4,4); //draw straight line: g.DrawLine(aPen, 50, 30, 200, 30); // define point array to draw a curve: Point point1 = new Point(50, 200); Point point2 = new Point(100, 75); Point point3 = new Point(150, 60); Point point4 = new Point(200, 160); Point point5 = new Point(250, 250); Point[] Points ={ point1, point2, point3, point4, point5}; g.DrawCurve(aPen, Points); aPen.Dispose(); //g.Dispose(); //Text rotation: RectangleF ClientRectangle = dirtyRect; string s = "A simple text string"; Rectangle rect = new Rectangle((int)ClientRectangle.X, (int)ClientRectangle.Y, (int)ClientRectangle.Width, (int)ClientRectangle.Height); drawingRectangle = new Rectangle(rect.Location, rect.Size); Size sz = new Size(rect.Width, rect.Height); var font = new Font("Arialss",14.0f,FontStyle.Bold | FontStyle.Italic | FontStyle.Underline); SizeF stringSize = g.MeasureString(s, font); Point Middle = new Point(sz.Width / 30, sz.Height / 2 - (int)stringSize.Height / 2); g.DrawLine(Pens.Black, new Point(0, rect.Height/2), new Point(rect.Width, rect.Height/2)); g.DrawLine(Pens.Black, new Point(rect.Width / 2, 0), new Point(rect.Width / 2, rect.Height)); g.TranslateTransform(Middle.X, Middle.Y); g.RotateTransform (-90); //StringFormat format = new StringFormat(StringFormatFlags.NoClip); StringFormat format = new StringFormat(); format.Alignment = StringAlignment.Center; //format.LineAlignment = StringAlignment.Center; g.DrawString (s, font, Brushes.Black, 0, 0, format); g.Dispose(); }
private static System.Drawing.Bitmap RotateImg (System.Drawing.Bitmap bmp, float angle) { angle = angle % 360; if (angle > 180) { angle -= 360; } float sin = (float)Math.Abs(Math.Sin(angle * Math.PI / 180.0)); // this function takes radians float cos = (float)Math.Abs(Math.Cos(angle * Math.PI / 180.0)); // this one too float newImgWidth = sin * bmp.Height + cos * bmp.Width; float newImgHeight = sin * bmp.Width + cos * bmp.Height; float originX = 0f; float originY = 0f; if (angle > 0) { if (angle <= 90) { originX = sin * bmp.Height; } else { originX = newImgWidth; originY = newImgHeight - sin * bmp.Width; } } else { if (angle >= -90) { originY = sin * bmp.Width; } else { originX = newImgWidth - sin * bmp.Height; originY = newImgHeight; } } System.Drawing.Bitmap newImg = new System.Drawing.Bitmap((int)newImgWidth, (int)newImgHeight); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(newImg); g.Clear(System.Drawing.Color.White); g.TranslateTransform(originX, originY); // offset the origin to our calculated values g.RotateTransform(angle); // set up rotate g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear; g.DrawImageUnscaled(bmp, 0, 0); // draw the image at 0, 0 g.Dispose(); return(newImg); }
void DrawRobot(Graphics g, Point loc) { var brush = Brushes.Teal; g.TranslateTransform(loc.X + CellLength / 2, loc.Y + CellLength / 2); g.RotateTransform(robot.KnownHeading); //We draw for straight up - a heading of zero. g.TranslateTransform(-CellLength / 2, -CellLength / 2); g.FillEllipse(brush, 1, 1, CellLength - 2, CellLength - 2); //Draw a rectangle in back of the robot g.FillRectangle(brush, 1, 1 + CellLength / 2, CellLength - 2, CellLength / 2 - 1); //Draw a yellow line near the front of the circle portion g.DrawLine(Pens.Yellow, CellLength / 3, CellLength / 4, 2 * CellLength / 3, CellLength / 4); g.ResetTransform(); }
public override void OnRender(Graphics g) { //g.DrawRectangle(Pen, new System.Drawing.Rectangle(LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height)); { g.TranslateTransform(ToolTipPosition.X, ToolTipPosition.Y); var c = g.BeginContainer(); { g.RotateTransform(Bearing - Overlay.Control.Bearing); g.ScaleTransform(Scale, Scale); g.FillPolygon(Fill, Arrow); } g.EndContainer(c); g.TranslateTransform(-ToolTipPosition.X, -ToolTipPosition.Y); } }
public static void DrawReverseString( Graphics g, string drawText, Font drawFont, Rectangle drawRect, Brush drawBrush, StringFormat drawFormat ) { GraphicsContainer container = g.BeginContainer(); // The text will be rotated around the origin (0,0) and so needs moving // back into position by using a transform g.TranslateTransform(drawRect.Left * 2 + drawRect.Width, drawRect.Top * 2 + drawRect.Height); // Rotate the text by 180 degress to reverse the direction g.RotateTransform(180); // Draw the string as normal and let then transforms do the work g.DrawString(drawText, drawFont, drawBrush, drawRect, drawFormat); g.EndContainer(container); }
public void Draw(Graphics g) { //Location corresponds to the center of this image... var copyt = g.Transform; g.TranslateTransform(Location.X, Location.Y); double useangle = (float)(Angle * (180d / Math.PI)); Debug.Print("useangle:" + useangle); g.RotateTransform((float)(useangle)); g.TranslateTransform((float)-DrawImage.Width / 2, (float)-DrawImage.Height / 2); //draw the image at 0,0... g.DrawImage(DrawImage, 0, 0,DrawSize.Width,DrawSize.Height); //reset the transform. g.Transform = copyt; }
public void Draw(Graphics g) { var deltaX = position.X + size.Width / 2; var deltaY = position.Y + size.Height / 2; g.TranslateTransform(deltaX, deltaY); g.RotateTransform(this.transformation.Angle); g.TranslateTransform(-deltaX, -deltaY); g.DrawImage(this.bitmap, position.X, position.Y, this.size.Width, this.size.Height); if (this.Hovered) { g.DrawRectangle(borderPen, position.X, position.Y, this.size.Width, this.size.Height); } if (this.Selected) { g.DrawRectangle(Pens.Orange, position.X, position.Y, this.size.Width, this.size.Height); } g.ResetTransform(); }
private static void RenderBitmapPoint(Graphics graphics, Point point, IViewport viewport, SymbolStyle symbolStyle) { var symbol = new Bitmap(BitmapRegistry.Instance.Get(symbolStyle.BitmapId)); var symbolscale = symbolStyle.SymbolScale; var offset = symbolStyle.SymbolOffset.ToGdi(); var rotation = symbolStyle.SymbolRotation; var dest = ConvertPoint(viewport.WorldToScreen(point)); var width = symbol.Width * symbolscale; var height = symbol.Height * symbolscale; graphics.TranslateTransform(dest.X, dest.Y); graphics.RotateTransform((float)rotation); graphics.TranslateTransform(offset.X, -offset.Y); graphics.TranslateTransform((int)(-width / 2.0), (int)(-height / 2.0)); graphics.DrawImage(symbol, 0, 0, (float)width, (float)height); graphics.ResetTransform(); }
public override void Draw(Graphics gr, Point position, Range range) { foreach (Place p in range) { int time = (int)(DateTime.Now.TimeOfDay.TotalMilliseconds/2); int angle = (int)(time % 360L); int angle2 = (int)((time - (p.iChar - range.Start.iChar)*20) % 360L)*2; int x = position.X + (p.iChar - range.Start.iChar) * range.tb.CharWidth; Range r = range.tb.GetRange(p, new Place(p.iChar+1, p.iLine)); Point point = new Point(x, position.Y + (int)(5 + 5 * Math.Sin(Math.PI * angle2 / 180))); gr.ResetTransform(); gr.TranslateTransform(point.X + range.tb.CharWidth / 2, point.Y +range.tb.CharHeight / 2); gr.RotateTransform(angle); gr.ScaleTransform(0.8f, 0.8f); gr.TranslateTransform(- range.tb.CharWidth / 2, -range.tb.CharHeight / 2); base.Draw(gr, new Point(0, 0), r); } gr.ResetTransform(); }
/// <summary> /// ワールド座標、回転を使ってレイヤーマップを生成 /// </summary> /// <param name="g"></param> /// <param name="layer"></param> /// <param name="drawGuideLine"></param> /// <param name="fastDraw"></param> /// <param name="offsetX"></param> /// <param name="offsetY"></param> /// <param name="bUseView">View座標で描画(BMP出力時などはfalse)</param> private void DrawLayerToWorld(Graphics g, LayerData layer, bool drawGuideLine, bool fastDraw) { int ctrX = layer.MapBmp.Width / 2; int ctrY = layer.MapBmp.Height / 2; g.InterpolationMode = InterpolationMode.HighQualityBilinear; g.ResetTransform(); //g.ScaleTransform((float)DrawMapScale, (float)DrawMapScale); g.TranslateTransform(-ctrX, -ctrY, MatrixOrder.Append); g.RotateTransform((float)layer.wAng, MatrixOrder.Append); g.TranslateTransform(ctrX + (int)layer.wX, ctrY + (int)layer.wY, MatrixOrder.Append); // View g.ScaleTransform(ViewScale, ViewScale, MatrixOrder.Append); g.TranslateTransform(ViewTransX, ViewTransY, MatrixOrder.Append); //g.DrawImageUnscaled(layer.MapBmp, 0, 0); if (fastDraw) { // 高速描画用トライアングル g.DrawPolygon(Pens.Red, layer.psLayerTriangle); } else { // 通常描画 g.DrawImage(layer.MapBmp, 0, 0); } if (drawGuideLine) { // 枠線描画 Rectangle rect = new Rectangle(0, 0, layer.MapBmp.Width - 1, layer.MapBmp.Height - 1); Pen colPen = Pens.Silver; if (layer.drawColor == colEditLayerPixel) { colPen = new Pen(colEditLayerPixel); } g.DrawRectangle(colPen, rect); } }
/// <summary> /// 以逆时针为方向对图像进行旋转 /// </summary> /// <param name="b">位图流</param> /// <param name="angle">旋转角度[0,360](前台给的)</param> /// <returns></returns> protected Bitmap Rotate(Bitmap b, int angle) { angle = angle % 360; //弧度转换 double radian = angle * Math.PI / 180.0; double cos = Math.Cos(radian); double sin = Math.Sin(radian); //原图的宽和高 int w = b.Width; int h = b.Height; int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); //目标位图 Bitmap dsImage = new Bitmap(W, H); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((W - w) / 2, (H - h) / 2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h); Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); g.TranslateTransform(center.X, center.Y); g.RotateTransform(360 - angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(b, rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); b.Dispose(); //dsImage.Save("yuancd.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); return(dsImage); }
void DrawShapes() { SetTitle("Shapes & Brushes"); var g = new Graphics(this); g.FillEllipse(Brushes.Red, 50, 50, 100, 100); g.DrawEllipse(Pens.Black, 50, 50, 100, 100); g.TranslateTransform(150, 150); g.RotateTransform(45); g.FillRectangle(Brushes.Yellow, 0, 0, 100, 100); g.ResetTransform(); var rect = new RectangleF(200, 100, 200, 200); var lg = new LinearGradientBrush(rect, Color.Red, Color.Blue, LinearGradientMode.Horizontal); g.FillEllipse(lg, rect); rect = new RectangleF(500, 100, 200, 200); lg = new LinearGradientBrush(rect, Color.Red, Color.Blue, LinearGradientMode.Horizontal); lg.InterpolationColors = ColorBlends.Rainbow; g.FillRectangle(lg, rect); }
protected void Page_Load(object sender, System.EventArgs e) { try { base.Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache); string text = Globals.CreateVerifyCode(4); int num = 45; int num2 = text.Length * 20; System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(num2 - 3, 40); System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap); graphics.Clear(System.Drawing.Color.AliceBlue); graphics.DrawRectangle(new System.Drawing.Pen(System.Drawing.Color.Gray, 0f), 0, 0, bitmap.Width - 1, bitmap.Height - 3); System.Random random = new System.Random(); System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.LightGray, 0f); for (int i = 0; i < 50; i++) { int x = random.Next(0, bitmap.Width); int y = random.Next(0, bitmap.Height); graphics.DrawRectangle(pen, x, y, 1, 1); } char[] array = text.ToCharArray(); System.Drawing.StringFormat stringFormat = new System.Drawing.StringFormat(System.Drawing.StringFormatFlags.NoClip); stringFormat.Alignment = System.Drawing.StringAlignment.Center; stringFormat.LineAlignment = System.Drawing.StringAlignment.Center; System.Drawing.Color[] array2 = new System.Drawing.Color[] { System.Drawing.Color.Black, System.Drawing.Color.Red, System.Drawing.Color.DarkBlue, System.Drawing.Color.Green, System.Drawing.Color.Brown, System.Drawing.Color.DarkCyan, System.Drawing.Color.Purple, System.Drawing.Color.DarkGreen }; for (int j = 0; j < array.Length; j++) { int num3 = random.Next(7); random.Next(4); System.Drawing.Font font = new System.Drawing.Font("Microsoft Sans Serif", 17f, System.Drawing.FontStyle.Bold); System.Drawing.Brush brush = new System.Drawing.SolidBrush(array2[num3]); System.Drawing.Point point = new System.Drawing.Point(14, 11); float num4 = (float)random.Next(-num, num); graphics.TranslateTransform((float)point.X, (float)point.Y); graphics.RotateTransform(num4); graphics.DrawString(array[j].ToString(), font, brush, 1f, 10f, stringFormat); graphics.RotateTransform(-num4); graphics.TranslateTransform(2f, (float)(-(float)point.Y)); } System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Gif); base.Response.ClearContent(); base.Response.ContentType = "image/gif"; base.Response.BinaryWrite(memoryStream.ToArray()); graphics.Dispose(); bitmap.Dispose(); } catch { } }
/// <summary> /// Draw the figure frame with axis labels, ticks, etc. /// Style it similar to how ClampFit displays ABF files. /// </summary> public Bitmap Render() { // prepare colors and fonts Font font_axis_labels = new Font("arial", 9, FontStyle.Regular); Font font_title = new Font("arial", 12, FontStyle.Bold); StringFormat string_format_center = new StringFormat(); string_format_center.Alignment = StringAlignment.Center; StringFormat string_format_right = new StringFormat(); string_format_right.Alignment = StringAlignment.Far; // prepare pens Pen penAxis = new Pen(color_axis_text); Pen penGrid = new Pen(color_grid); penGrid.DashPattern = new float[] { 4, 4 }; // fill the whole canvas with the default background color gfx.Clear(color_figure_background); // fill the background of the data area gfx.FillRectangle(new SolidBrush(color_data_background), data_rectangle); // draw a highlight color on the far left gfx.FillRectangle(new SolidBrush(color_data_highlight), new Rectangle(0, 0, 30, figure_height - data_pad_bottom)); // vertical axis label (complicated becasue it's rotated) string axis_label_y = "Analog Input 0\n(pA)"; SizeF axis_label_y_size = gfx.MeasureString(axis_label_y, font_axis_labels); gfx.RotateTransform(-90); gfx.DrawString(axis_label_y, font_axis_labels, new SolidBrush(Color.Black), new Point(-(figure_height - data_pad_bottom) / 2, 1), string_format_center); gfx.ResetTransform(); // title gfx.DrawString("ScottPlot Does Amazing Things", font_title, new SolidBrush(color_axis_text), new Point(figure_width / 2, data_pad_top / 2 - 8), string_format_center); // horizontal axis label gfx.DrawString("Time (ms)", font_axis_labels, new SolidBrush(color_axis_text), new Point(figure_width / 2, figure_height - data_pad_bottom / 2), string_format_center); // horizontal axis foreach (double tickValX in TickGen(axis_X1, axis_X2, data_width)) { int tickPx = (int)((tickValX - axis_X1) * (double)this.pixels_per_unit_X) + data_pos_left; gfx.DrawLine(penGrid, new Point(tickPx, data_pos_top), new Point(tickPx, data_pos_bottom)); gfx.DrawLine(penAxis, new Point(tickPx, data_pos_bottom), new Point(tickPx, data_pos_bottom + 3)); string tickLabel = TickString(tickValX, this.axis_X2 - this.axis_X1); gfx.DrawString(tickLabel, font_axis_labels, new SolidBrush(color_axis_text), new Point(tickPx, data_pos_bottom + 8), string_format_center); } // vertical axis foreach (double tickValY in TickGen(axis_Y1, axis_Y2, data_height)) { int tickPx = data_pos_bottom - (int)((tickValY - axis_Y1) * (double)this.pixels_per_unit_Y); gfx.DrawLine(penGrid, new Point(data_pos_left, tickPx), new Point(data_pos_right, tickPx)); gfx.DrawLine(penAxis, new Point(data_pos_left - 3, tickPx), new Point(data_pos_left, tickPx)); string tickLabel = TickString(tickValY, this.axis_Y2 - this.axis_Y1); gfx.DrawString(tickLabel, font_axis_labels, new SolidBrush(color_axis_text), new Point(data_pos_left - 3, tickPx - 8), string_format_right); } // draw a black line around the data area gfx.DrawRectangle(penAxis, data_pos_left, data_pos_top, data_width, data_height); return(this.bitmap); }
private void DrawingSlash(System.Drawing.Graphics g, System.Drawing.Rectangle r, FarPoint.Win.Spread.Appearance appearance, Slash Slash) { using (Brush brush = new SolidBrush(appearance.ForeColor)) { g.SmoothingMode = SmoothingMode.HighQuality; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; Brush BackColorBrush = new SolidBrush(appearance.BackColor); g.FillRectangle(BackColorBrush, r); BackColorBrush.Dispose(); Pen myPen = new System.Drawing.Pen(Color.Black); int count = 0; float Angle, radians; int rightX, rightY; Slash slash = Slash; string[] sArray = slash.Text.Split('|'); if (sArray.Length != 0) { count = sArray.Length - 1; } int sum = count + 1; if (slash.RotationStyle == RotationStyle.Counterclockwise) { if (count == 1) { g.DrawLine(myPen, r.X, r.Y + r.Height, r.X + r.Width, r.Y); } else if (count == 2) { g.DrawLine(myPen, r.X, r.Y + r.Height, r.X + (2.0f / 3) * r.Width, r.Y); g.DrawLine(myPen, r.X, r.Y + r.Height, r.X + r.Width, r.Y + (1.0f / 3) * r.Height); } else if (count > 2) { float height; for (int j = 1; j <= count; j++) { Angle = (90 / sum) * j; height = r.Width / (float)(Math.Tan(Angle * Math.PI / 180.0f)); rightX = r.X + r.Width; rightY = r.Y + (int)height; g.DrawLine(myPen, r.X, r.Y, rightX, rightY); } } for (int i = 0; i < sArray.Length; i++) { if (i == 0) { Rectangle _rect = new Rectangle(r.X, r.Y, Convert.ToInt32(((sum - count + 1.0f) / sum) * (r.Width / sum)), Convert.ToInt32(count * 1.0 / sum * r.Height)); g.DrawString(sArray[i], appearance.Font, brush, _rect, strFormat); } else if (i == sArray.Length - 1) { Rectangle _rect = new Rectangle(Convert.ToInt32(r.X + (1.0f / sum) * r.Width), Convert.ToInt32(r.Y + r.Height - 1.0f / sum * r.Height), Convert.ToInt32((sum - count * 1.0f) * r.Width / sum), Convert.ToInt32((sum - count * 1.0f) / sum * r.Height)); g.DrawString(sArray[i], appearance.Font, brush, _rect, strFormat); } else { if (count == 2) { radians = Convert.ToSingle(Math.Atan(r.Height * 1.0 / r.Width)); Angle = Convert.ToSingle(radians * 180 / Math.PI); } else { Angle = (1 + 2 * i) * (45.0f / (count + 1)); } g.TranslateTransform(r.X + 3, r.Y + r.Height - 7); g.RotateTransform(-(float)Angle); g.DrawString(sArray[i], appearance.Font, brush, r.Width / 3f, 0); g.ResetTransform(); } } } else { if (count == 1) { g.DrawLine(myPen, r.X, r.Y, r.X + r.Width, r.Y + r.Height); } else if (count == 2) { g.DrawLine(myPen, r.X, r.Y, r.X + (2.0f / 3) * r.Width, r.Y + r.Height); g.DrawLine(myPen, r.X, r.Y, r.X + r.Width, r.Y + (2.0f / 3) * r.Height); } else if (count > 2) { float height; for (int j = 1; j <= count; j++) { Angle = (90 / sum) * j; height = r.Width / (float)(Math.Tan(Angle * Math.PI / 180.0f)); rightX = r.X + r.Width; rightY = r.Y + (int)height; g.DrawLine(myPen, r.X, r.Y, rightX, rightY); } } for (int i = 0; i < sArray.Length; i++) { if (i == 0) { Rectangle _rect = new Rectangle(Convert.ToInt32(r.X + r.Width / sum * 1.0), r.Y, Convert.ToInt32(count * r.Width / sum * 1.0), Convert.ToInt32(((sum - count + 1.0f) / sum) * (r.Height / sum))); g.DrawString(sArray[i], appearance.Font, brush, _rect, strFormat); } else if (i == sArray.Length - 1) { Rectangle _rect = new Rectangle(r.X, Convert.ToInt32(r.Y + r.Height / sum * 1.0), Convert.ToInt32((sum - count + 1.0f) * r.Width / sum / sum), Convert.ToInt32(count * 1.0 * r.Height / sum)); g.DrawString(sArray[i], appearance.Font, brush, _rect, strFormat); } else { if (count == 2) { radians = Convert.ToSingle(Math.Atan(r.Height * 1.0 / r.Width)); Angle = Convert.ToSingle(radians * 180 / Math.PI); } else { Angle = (1 + 2 * i) * (45 / (count + 1)); } g.TranslateTransform(r.X + 3, r.Y - 4); g.RotateTransform((float)Angle); g.DrawString(sArray[i], appearance.Font, brush, r.Width / 2.8f, 0); g.ResetTransform(); } } } myPen.Dispose(); } }
/// <summary> /// Renders a point to the map. /// </summary> /// <param name="g">Graphics reference</param> /// <param name="point">Point to render</param> /// <param name="symbol">Symbol to place over point</param> /// <param name="symbolscale">The amount that the symbol should be scaled. A scale of '1' equals to no scaling</param> /// <param name="offset">Symbol offset af scale=1</param> /// <param name="rotation">Symbol rotation in degrees</param> /// <param name="map">Map reference</param> public static void DrawPoint(System.Drawing.Graphics g, SharpMap.Geometries.Point point, System.Drawing.Bitmap symbol, float symbolscale, System.Drawing.PointF offset, float rotation, SharpMap.Map map) { if (point == null) { return; } if (symbol == null) //We have no point style - Use a default symbol { symbol = defaultsymbol; } if (point.UseCustomSymbol) { symbol = point.Symbol; } System.Drawing.PointF pp = SharpMap.Utilities.Transform.WorldtoMap(point, map); if (float.IsPositiveInfinity(pp.X) || float.IsPositiveInfinity(pp.Y)) { return; } if (rotation != 0 && rotation != float.NaN) { g.TranslateTransform(pp.X, pp.Y); g.RotateTransform(rotation); g.TranslateTransform(-symbol.Width / 2, -symbol.Height / 2); if (symbolscale == 1f) { g.DrawImageUnscaled(symbol, (int)(pp.X - symbol.Width / 2 + offset.X), (int)(pp.Y - symbol.Height / 2 + offset.Y)); } else { float width = symbol.Width * symbolscale; float height = symbol.Height * symbolscale; g.DrawImage(symbol, (int)pp.X - width / 2 + offset.X * symbolscale, (int)pp.Y - height / 2 + offset.Y * symbolscale, width, height); } g.Transform = map.MapTransform; } else { if (symbolscale == 1f) { if (point.UseColor) { SolidBrush sBrush = new SolidBrush(point.Color); g.FillRectangle(sBrush, (int)(pp.X - 5 + offset.X), (int)(pp.Y - 5 + offset.Y), 10, 10); g.DrawRectangle(new Pen(Color.Orange), (int)(pp.X - 5 + offset.X), (int)(pp.Y - 5 + offset.Y), 10, 10); } else { g.DrawImageUnscaled(symbol, (int)(pp.X - symbol.Width / 2 + offset.X), (int)(pp.Y - symbol.Height / 2 + offset.Y)); } } else { if (point.UseColor && !point.UseCustomSymbol) { SolidBrush sBrush = new SolidBrush(point.Color); g.FillRectangle(sBrush, (int)(pp.X - 5 + offset.X), (int)(pp.Y - 5 + offset.Y), 10, 10); g.DrawRectangle(new Pen(Color.Orange), (int)(pp.X - 5 + offset.X), (int)(pp.Y - 5 + offset.Y), 10, 10); } else if (point.UseColor && point.UseCustomSymbol) { Bitmap transformedSymbol = ConvertBitmapColor(Color.Red, point.Color, symbol); float width = symbol.Width * symbolscale; float height = symbol.Height * symbolscale; g.DrawImage(transformedSymbol, (int)pp.X - width / 2 + offset.X * symbolscale, (int)pp.Y - height / 2 + offset.Y * symbolscale, width, height); } else { float width = symbol.Width * symbolscale; float height = symbol.Height * symbolscale; g.DrawImage(symbol, (int)pp.X - width / 2 + offset.X * symbolscale, (int)pp.Y - height / 2 + offset.Y * symbolscale, width, height); } } } }
public System.Drawing.Bitmap GetNew(System.Drawing.Bitmap pMarqueeData) { System.Drawing.Bitmap result; lock (this.StaticBitmap) { lock (this.ledSub.LastDrawn) { switch (this.ledEdge.Mode) { case LedEdgeMode.Static: { System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(this.StaticBitmap); System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap); graphics.DrawImage(pMarqueeData, new System.Drawing.Point(this.ledEdge.Height, this.ledEdge.Height)); result = bitmap; break; } case LedEdgeMode.Clockwise: case LedEdgeMode.CounterClockwise: { if (this.circularCount >= this.circular) { this.circularCount = 0m; } if (this.circularCount <= -1m) { this.circularCount = this.circular; } System.Drawing.Bitmap bitmap2 = new System.Drawing.Bitmap(this.AlphaBitmap); System.Drawing.Graphics graphics2 = System.Drawing.Graphics.FromImage(bitmap2); graphics2.Clear(System.Drawing.Color.Green); if (this.circularCount == 0m) { graphics2.DrawImage(this.EdgeBitmap, new System.Drawing.Point(0, 0)); } else { graphics2.DrawImage(this.EdgeBitmap, new System.Drawing.Point((int)this.circularCount, 0)); graphics2.DrawImage(this.EdgeBitmap, new System.Drawing.Rectangle(0, 0, (int)this.circularCount, this.ledEdge.Height), new System.Drawing.Rectangle(this.EdgeBitmap.Width - (int)this.circularCount, 0, (int)this.circularCount, this.ledEdge.Height), System.Drawing.GraphicsUnit.Pixel); } bitmap2 = this.SetCornerAlpha(bitmap2); System.Drawing.Bitmap bitmap3 = new System.Drawing.Bitmap(this.subSize.Width, this.subSize.Height); System.Drawing.Graphics graphics3 = System.Drawing.Graphics.FromImage(bitmap3); graphics3.DrawImage(bitmap2, new System.Drawing.Point(0, 0)); graphics3.TranslateTransform(0f, 0f); graphics3.RotateTransform(90f); graphics3.DrawImage(bitmap2, new System.Drawing.Rectangle(0, -this.subSize.Width, this.subSize.Height, this.ledEdge.Height), new System.Drawing.Rectangle(this.subSize.Width, -1, this.subSize.Height, this.ledEdge.Height), System.Drawing.GraphicsUnit.Pixel); graphics3.DrawImage(bitmap2, new System.Drawing.Rectangle(0, -this.subSize.Width, this.subSize.Height, this.ledEdge.Height), new System.Drawing.Rectangle(this.subSize.Width, 0, this.subSize.Height, this.ledEdge.Height), System.Drawing.GraphicsUnit.Pixel); graphics3.RotateTransform(90f); graphics3.DrawImage(bitmap2, new System.Drawing.Rectangle(-this.subSize.Width, -this.subSize.Height, this.subSize.Width, this.ledEdge.Height), new System.Drawing.Rectangle(this.subSize.Width + this.subSize.Height, -1, this.subSize.Width, this.ledEdge.Height), System.Drawing.GraphicsUnit.Pixel); graphics3.RotateTransform(90f); graphics3.DrawImage(bitmap2, new System.Drawing.Rectangle(-this.subSize.Height, 0, this.subSize.Height, this.ledEdge.Height), new System.Drawing.Rectangle(this.subSize.Width * 2 + this.subSize.Height, 0, this.subSize.Height, this.ledEdge.Height), System.Drawing.GraphicsUnit.Pixel); graphics3.RotateTransform(90f); lock (this.ledSub.LastDrawn) { lock (this.ledEdge) { graphics3.DrawImage(pMarqueeData, new System.Drawing.Point(this.ledEdge.Height, this.ledEdge.Height)); } } this.circularCount -= this.ledEdge.Speed / 5m; result = bitmap3; break; } case LedEdgeMode.Blink: this.flashCount += this.ledEdge.Speed; if (this.flashCount >= 200) { this.flashCount = 0; } if (this.flashCount >= 100) { System.Drawing.Bitmap bitmap4 = new System.Drawing.Bitmap(this.StaticBitmap); System.Drawing.Graphics graphics4 = System.Drawing.Graphics.FromImage(bitmap4); graphics4.DrawImage(pMarqueeData, new System.Drawing.Point(this.ledEdge.Height, this.ledEdge.Height)); result = bitmap4; } else { System.Drawing.Bitmap bitmap5 = new System.Drawing.Bitmap(this.StaticBitmap.Width, this.StaticBitmap.Height); System.Drawing.Graphics graphics5 = System.Drawing.Graphics.FromImage(bitmap5); graphics5.DrawImage(pMarqueeData, new System.Drawing.Point(this.ledEdge.Height, this.ledEdge.Height)); result = bitmap5; } break; default: result = null; break; } } } return(result); }
partial void RotateTransformImp(float degrees) { g.RotateTransform(degrees); }
// // CREATE GRADIENT PROFILE // /// <summary>Creates the route gradient profile.</summary> /// <returns>The route gradient profile as Bitmap.</returns> /// <param name="Width">The width of the bitmap to create.</param> /// <param name="Height">The height of the bitmap to create.</param> /// <param name="inGame"><c>true</c> = bitmap for in-game overlay | <c>false</c> = for standard window.</param> internal static Bitmap CreateRouteGradientProfile(int Width, int Height, bool inGame) { if (Program.CurrentRoute.Tracks[0].Elements.Length > 36 && Program.CurrentRoute.Stations.Length == 0) { // If we have track elements, but no stations, show a specific error message, rather // than the more generic one thrown later // NOTE: Will throw the generic error message on routes shorter than 900m with no stations throw new InvalidDataException(Translations.GetInterfaceString("errors_route_corrupt_nostations")); } // Track elements are assumed to be all of the same length, and this length // is used as measure unit, rather than computing the incremental track length // in any 'real world' unit (like m). // HORIZONTAL RANGE: find first and last used element based on stations int n, n0, n1; RouteRange(out n, out n0, out n1); // VERTICAL RANGE double y0 = double.PositiveInfinity, y1 = double.NegativeInfinity; for (int i = n0; i <= n1; i++) { double y = Program.CurrentRoute.Tracks[0].Elements[i].WorldPosition.Y; if (y < y0) { y0 = y; } if (y > y1) { y1 = y; } } if (y0 >= y1 - 1.0) { y0 = y1 - 1.0; } // allow for some padding around actual data double ox = LeftPad, oy = TopPad; double w = (double)(Width - (LeftPad + RightPad)); double h = (double)(Height - (TopPad + BottomPad + TrackOffsPad)); // horizontal and vertical scale double nd = w / (double)(n1 - n0); double yd = h / (double)(y1 - y0); // set total bitmap track position range; used by in-game profile to place // the current position of the trains; as the train positions are known as track positions, // actual track positions are needed here, rather than indices into the track element array. double minX = Program.CurrentRoute.Tracks[0].Elements[n0].StartingTrackPosition; double maxX = Program.CurrentRoute.Tracks[0].Elements[n1].StartingTrackPosition; double offX = ox * (maxX - minX) / w; lastGradientMinTrack = (int)(minX - offX); lastGradientMaxTrack = (int)(maxX + offX); // BITMAP (in-game display needs transparency) Bitmap b = new Bitmap(Width, Height, inGame ? System.Drawing.Imaging.PixelFormat.Format32bppArgb : System.Drawing.Imaging.PixelFormat.Format24bppRgb); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(b); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit; int mode = inGame ? 1 : 0; g.Clear(mapColors[mode].background); // BELOW SEA LEVEL { double y = oy + (h - 0.5 * (double)(-Program.CurrentRoute.Atmosphere.InitialElevation - y0) * yd); double x0 = ox - (double)(0) * nd; double x1 = ox + (double)(n1 - n0) * nd; g.FillRectangle(mapColors[mode].belowSeaFill, (float)x0, (float)y, (float)x1, (float)(oy + h) - (float)y); g.DrawLine(mapColors[mode].belowSeaBrdr, (float)x0, (float)y, (float)x1, (float)y); } // GRADIENT PROFILE { n = n1 - n0 + 1; PointF[] p = new PointF[n + 2]; p[0] = new PointF((float)ox, (float)(oy + h)); for (int i = n0; i <= n1; i++) { double x = ox + (double)(i - n0) * nd; double y = oy + (h - 0.5 * (double)(Program.CurrentRoute.Tracks[0].Elements[i].WorldPosition.Y - y0) * yd); p[i - n0 + 1] = new PointF((float)x, (float)y); } p[n + 1] = new PointF((float)(ox + (double)(n - 1) * nd), (float)(oy + h)); g.FillPolygon(mapColors[mode].elevFill, p); for (int i = 1; i < n; i++) { g.DrawLine(mapColors[mode].elevBrdr, p[i], p[i + 1]); } g.DrawLine(mapColors[mode].elevBrdr, 0.0f, (float)(oy + h), (float)Width, (float)(oy + h)); } // STATION NAMES { Font f = new Font(FontFamily.GenericSansSerif, 12.0f, GraphicsUnit.Pixel); StringFormat m = new StringFormat(); for (int i = n0; i <= n1; i++) { for (int j = 0; j < Program.CurrentRoute.Tracks[0].Elements[i].Events.Length; j++) { if (Program.CurrentRoute.Tracks[0].Elements[i].Events[j] is StationStartEvent) { StationStartEvent e = (StationStartEvent)Program.CurrentRoute.Tracks[0].Elements[i].Events[j]; if (Program.CurrentRoute.Stations[e.StationIndex].Name != string.Empty) { bool stop = Program.CurrentRoute.Stations[e.StationIndex].PlayerStops(); if (Program.CurrentRoute.Stations[e.StationIndex].Name.IsJapanese()) { m.Alignment = StringAlignment.Near; m.LineAlignment = StringAlignment.Near; double x = ox + (double)(i - n0) * nd; double y = oy + (h - 0.5 * (double)(Program.CurrentRoute.Tracks[0].Elements[i].WorldPosition.Y - y0) * yd); string t = Program.CurrentRoute.Stations[e.StationIndex].Name; float tx = 0.0f, ty = (float)oy; for (int k = 0; k < t.Length; k++) { SizeF s = g.MeasureString(t.Substring(k, 1), f, 65536, StringFormat.GenericTypographic); if (s.Width > tx) { tx = s.Width; } } for (int k = 0; k < t.Length; k++) { g.DrawString(t.Substring(k, 1), f, stop ? mapColors[mode].actNameText : mapColors[mode].inactNameText, (float)x - 0.5f * tx, ty); SizeF s = g.MeasureString(t.Substring(k, 1), f, 65536, StringFormat.GenericTypographic); ty += s.Height; } g.DrawLine(stop ? mapColors[mode].actNameBrdr : mapColors[mode].inactNameBrdr, new PointF((float)x, ty + 4.0f), new PointF((float)x, (float)y)); } else { m.Alignment = StringAlignment.Far; m.LineAlignment = StringAlignment.Near; double x = ox + (double)(i - n0) * nd; double y = oy + (h - 0.5 * (double)(Program.CurrentRoute.Tracks[0].Elements[i].WorldPosition.Y - y0) * yd); g.RotateTransform(-90.0f); g.TranslateTransform((float)x, (float)oy, System.Drawing.Drawing2D.MatrixOrder.Append); g.DrawString(Program.CurrentRoute.Stations[e.StationIndex].Name, f, stop ? mapColors[mode].actNameText : mapColors[mode].inactNameText, new PointF(0.0f, -5.0f), m); g.ResetTransform(); SizeF s = g.MeasureString(Program.CurrentRoute.Stations[e.StationIndex].Name, f); g.DrawLine(stop ? mapColors[mode].actNameBrdr : mapColors[mode].inactNameBrdr, new PointF((float)x, (float)(oy + s.Width + 4)), new PointF((float)x, (float)y)); } } } } } } // ROUTE MARKERS { Font f = new Font(FontFamily.GenericSansSerif, 10.0f, GraphicsUnit.Pixel); Font fs = new Font(FontFamily.GenericSansSerif, 9.0f, GraphicsUnit.Pixel); StringFormat m = new StringFormat { Alignment = StringAlignment.Far, LineAlignment = StringAlignment.Center }; System.Globalization.CultureInfo Culture = System.Globalization.CultureInfo.InvariantCulture; int k = TrackOffDist * n / Width; if (k == 0) { if (!inGame) { //If k is equal to zero, this generally means that the WithTrack section is missing from our routefile //Adding zero to the loop control variable will also produce an infinite loop, so that's a bad idea too throw new InvalidDataException(Translations.GetInterfaceString("errors_route_corrupt_withtrack")); } /* * A route with a single station can somehow sometimes work OK in preview but not in-game * Whilst the routefile is probably broken don't chuck the exception here as it takes down the loader */ k = 1; } for (int i = n0; i <= n1; i += k) { double x = ox + (double)(i - n0) * nd; double y = (double)(Program.CurrentRoute.Tracks[0].Elements[i].WorldPosition.Y - y0) * yd; // track offset label if (x < w) { string t = ((int)Math.Round(Program.CurrentRoute.Tracks[0].Elements[i].StartingTrackPosition)).ToString(Culture); g.DrawString(t + "m", f, mapColors[mode].actNameText, (float)x, (float)(oy + h + TrackOffY)); } // route height at track offset (with measure and vertical line) { y = oy + (h - 0.5 * y) + 2.0f; string t = ((int)Math.Round(Program.CurrentRoute.Atmosphere.InitialElevation + Program.CurrentRoute.Tracks[0].Elements[i].WorldPosition.Y)).ToString(Culture); SizeF s = g.MeasureString(t, fs); if (y < oy + h - (double)s.Width - 10.0) { g.RotateTransform(-90.0f); g.TranslateTransform((float)x, (float)y + 4.0f, System.Drawing.Drawing2D.MatrixOrder.Append); g.DrawString(t + "m", fs, mapColors[mode].actNameText, 0.0f, 0.0f, m); g.ResetTransform(); g.DrawLine(mapColors[mode].inactNameBrdr, (float)x, (float)(y + s.Width + 12.0), (float)x, (float)(oy + h)); } } } } // finalize return(b); }
private void PaintTrape(System.Drawing.Graphics g) { System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(_color); //get suitable rectangle dimensions double stepSize = 5; double gWidth = this.Width - stepSize; double WtoH = _width / _depth; double gHeight = gWidth / WtoH; do { if (gHeight >= this.Height) { gWidth -= stepSize; gHeight = gWidth / WtoH; } else { break; } } while (true); int xPt, yPt; xPt = (this.Width - (int)gWidth) / 2; yPt = (this.Height - (int)gHeight) / 2; //g.DrawRectangle(myPen, xPt, yPt, (int)gWidth, (int)gHeight); double lBankRun = gHeight * _sideslope; double lWidthBottom = gWidth - 2 * lBankRun; Point UL = new Point(xPt, yPt); Point BL = new Point((int)(xPt + lBankRun), (int)(yPt + gHeight)); Point BR = new Point((int)(xPt + lBankRun + lWidthBottom), (int)(yPt + gHeight)); Point UR = new Point((int)(xPt + gWidth), yPt); g.DrawLine(myPen, UL, BL); g.DrawLine(myPen, BL, BR); g.DrawLine(myPen, BR, UR); myPen.Color = Color.Black; myPen.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot; g.DrawLine(myPen, xPt, yPt, xPt + (int)gWidth, yPt); g.DrawLine(myPen, xPt + (int)(gWidth / 2), yPt, xPt + (int)(gWidth / 2), yPt + (int)gHeight); string sWidth = _width.ToString() + " (Top Width)"; string sDepth = _depth.ToString() + " (Depth)"; Font lblFont = new Font(System.Drawing.FontFamily.GenericSerif, 9); SolidBrush lblBrush = new SolidBrush(Color.Black); g.DrawString(sWidth, lblFont, lblBrush, (float)(xPt + gWidth / 4), (float)(yPt + 3)); var textSize = TextRenderer.MeasureText(sDepth, lblFont); g.TranslateTransform((float)(xPt + gWidth / 2 + textSize.Height + 2), (float)(yPt + 8)); g.RotateTransform(90f); //g.DrawString(sDepth, lblFont, lblBrush, (float)(xPt + gWidth / 2 + 1), (float)(yPt + gHeight / 2)); g.DrawString(sDepth, lblFont, lblBrush, this.DisplayRectangle); g.ResetTransform(); }
private void PaintEllipse(System.Drawing.Graphics g) { System.Drawing.Pen myPen; myPen = new System.Drawing.Pen(_color); //get suitable rectangle dimensions double stepSize = 2; double gWidth = this.Width - stepSize; double WtoH = _width / _depth; double gHeight = gWidth / WtoH; do { if (gHeight > (this.Height - stepSize)) { gWidth -= stepSize; gHeight = gWidth / WtoH; } else { break; } } while (true); double upperLeftPtX = (this.Width - gWidth) / 2; double upperLeftPtY = (this.Height - gHeight) / 2; double upperRightPtX = upperLeftPtX + gWidth; double controlX = upperLeftPtX + (gWidth / 2); double controlY = upperLeftPtY + gHeight; double lRad = (Math.Pow(gHeight, 2.0) + Math.Pow(gWidth / 2.0, 2.0)) / (2 * gHeight); double lDropToChord = lRad - gHeight; double lStartAngle = Math.Atan2(lDropToChord, gWidth / 2) * 180 / Math.PI; double lSweepAngle = 180 - 2 * lStartAngle; //Rectangle lRect = new Rectangle((int)upperLeftPtX, (int)upperLeftPtY, (int)gWidth, (int)gHeight); double lNewUpperLeftPtX = (upperLeftPtX + gWidth / 2) - lRad; double lNewUpperLeftPtY = upperLeftPtY - lRad - lDropToChord; double lNewHeight = gHeight + lRad + lDropToChord; Rectangle lRect = new Rectangle((int)lNewUpperLeftPtX, (int)lNewUpperLeftPtY, (int)(lRad * 2), (int)lNewHeight); //g.DrawRectangle(myPen, lRect); g.DrawArc(myPen, lRect, (float)lStartAngle, (float)lSweepAngle); //System.Drawing.Drawing2D.GraphicsPath lArc = new System.Drawing.Drawing2D.GraphicsPath(System.Drawing.Drawing2D.FillMode.Alternate); //lArc.AddArc(lRect, 0, 180); //g.DrawPath(myPen, lArc); myPen.Color = Color.Black; myPen.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot; g.DrawLine(myPen, (int)upperLeftPtX, (int)upperLeftPtY, (int)upperRightPtX, (int)upperLeftPtY); g.DrawLine(myPen, (float)controlX, (float)upperLeftPtY, (float)controlX, (float)gHeight); String w = _width.ToString() + "(width)"; int xWidthDrawText = (int)gWidth / 2; Font lblFont = new Font(System.Drawing.FontFamily.GenericSerif, 9); SolidBrush lblBrush = new SolidBrush(Color.Black); //g.DrawString(w, lblFont, lblBrush, upperLeftPtX + xWidthDrawText - 5, upperLeftPtY + 10); g.DrawString(w, lblFont, lblBrush, (float)(upperLeftPtX + gWidth / 4), (float)(upperLeftPtY + 5)); String d = _depth.ToString() + " (depth)"; //g.DrawString(d, lblFont, lblBrush, xDepth, yDepth); var textSize = TextRenderer.MeasureText(d, lblFont); g.TranslateTransform((float)(upperLeftPtX + gWidth / 2 + textSize.Height + 2), (float)(upperLeftPtY + 8)); g.RotateTransform(90f); g.DrawString(d, lblFont, lblBrush, this.DisplayRectangle); g.ResetTransform(); }
/// <summary> /// 以逆时针为方向对图像进行旋转,处理成功后会覆盖原有图片 /// </summary> /// <param name="file_path">文件相对路径</param> /// <param name="angle">旋转角度[0,360]</param> /// <returns></returns> public static void ImageRotate(string file_path, int angle) { //文件拓展名 string ext = GetFileExt(file_path); Image img_temp = Image.FromFile(GetMapPath(file_path)); Bitmap b = new Bitmap(img_temp); angle = angle % 360; //弧度转换 double radian = angle * Math.PI / 180.0; double cos = Math.Cos(radian); double sin = Math.Sin(radian); //原图的宽和高 int w = b.Width; int h = b.Height; int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); //目标位图 Bitmap dsImage = new Bitmap(W, H); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((W - w) / 2, (H - h) / 2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h); Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); g.TranslateTransform(center.X, center.Y); g.RotateTransform(360 - angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(b, rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); b.Dispose(); img_temp.Dispose(); dsImage.Save(GetMapPath(file_path), GetImageFormat(ext)); GC.Collect();//强制回收 ////旋转后图片提及会变大,这里进行压缩 //ImgThumbnail ya = new ImgThumbnail(); ////临时文件名 //string file_path_io = GetMapPath(file_path); //string fileExt = IOHelper.GetFileExt(file_path_io); //string guid = Guid.NewGuid().ToString(); //string file_path_server = file_path.Substring(0, file_path.LastIndexOf("/")) + "/"; //Hashtable hash = IOHelper.GetImageWidthHeight(file_path_io); //string saveTempName = guid + "_temp." + fileExt; //if (ya.Thumbnail(file_path_io, IOHelper.GetMapPath(file_path_server + saveTempName), TypeHelper.ObjectToInt(hash["w"]), TypeHelper.ObjectToInt(hash["h"]), 20, ImgThumbnail.ImgThumbnailType.H)) //{ // //压缩成功,删掉大文件 // IOHelper.DeleteIOFile(file_path_io); // //把新文件进行改名 // System.IO.File.Move(IOHelper.GetMapPath(file_path_server + saveTempName), file_path_io); //给文件改名 //} //else //{ // IOHelper.WriteLogs("图片压缩失败"); //} }
/// <summary> /// 创建验证图片 /// </summary> /// <param name="Width">宽度</param> /// <param name="Height">高度</param> /// <param name="VerifyCode">验证码值</param> /// <returns></returns> public static byte[] CreateVerifyGif(string VerifyCode, int Width, int Height) { int randAngle = 45; //随机转动角度 int mapWidth = (int)(VerifyCode.Length * 16) > Width ? (int)(VerifyCode.Length * 16) : Width; int mapHeight = Height > 24 ? Height : 24; System.Drawing.Bitmap map = new System.Drawing.Bitmap(mapWidth, mapHeight); //创建图片背景 System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(map); graph.Clear(System.Drawing.Color.AliceBlue); //清除画面,填充背景 graph.DrawRectangle(new System.Drawing.Pen(System.Drawing.Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1); //画一个边框 //graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式 Random rand = new Random(); //背景噪点生成 System.Drawing.Pen blackPen = new System.Drawing.Pen(System.Drawing.Color.LightGray, 0); for (int i = 0; i < 50; i++) { int x = rand.Next(0, map.Width); int y = rand.Next(0, map.Height); graph.DrawRectangle(blackPen, x, y, 1, 1); } //验证码旋转,防止机器识别 char[] chars = VerifyCode.ToCharArray(); //拆散字符串成单字符数组 //文字距中 System.Drawing.StringFormat format = new System.Drawing.StringFormat(System.Drawing.StringFormatFlags.NoClip); format.Alignment = System.Drawing.StringAlignment.Center; format.LineAlignment = System.Drawing.StringAlignment.Center; //定义颜色 System.Drawing.Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; //定义字体 string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" }; for (int i = 0; i < chars.Length; i++) { int cindex = rand.Next(c.Length); int findex = rand.Next(font.Length); Font f = new System.Drawing.Font(font[findex], 14, System.Drawing.FontStyle.Bold); //字体样式(参数2为字体大小) Brush b = new System.Drawing.SolidBrush(c[cindex]); Point dot = new Point(14, 14); //graph.DrawString(dot.X.ToString(),fontstyle,new SolidBrush(Color.Black),10,150);//测试X坐标显示间距的 float angle = rand.Next(-randAngle, randAngle); //转动的度数 graph.TranslateTransform(dot.X, dot.Y); //移动光标到指定位置 graph.RotateTransform(angle); graph.DrawString(chars[i].ToString(), f, b, 1, 1, format); //graph.DrawString(chars[i].ToString(),fontstyle,new SolidBrush(Color.Blue),1,1,format); graph.RotateTransform(-angle); //转回去 graph.TranslateTransform(-2, -dot.Y); //移动光标到指定位置,每个字符紧凑显示,避免被软件识别 } //生成图片 System.IO.MemoryStream ms = new System.IO.MemoryStream(); map.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); graph.Dispose(); map.Dispose(); return(ms.ToArray()); }
/// <summary> /// Draw the header /// </summary> /// <param name="g">Graphic object being drawn to</param> /// <param name="rect">Size of the area to draw</param> private void DrawHeader(System.Drawing.Graphics g, System.Drawing.Rectangle rect) { if (g == null) { throw new ArgumentNullException("g"); } Rectangle headerRect; LinearGradientMode mode = Orientation == Orientation.Horizontal ? LinearGradientMode.Vertical : LinearGradientMode.Horizontal; if (Collapsed) { headerRect = new Rectangle(0, 0, Width - 1, Height - 1); using (LinearGradientBrush aGB = new LinearGradientBrush(headerRect, CollapsedColorFrom, CollapsedColorTo, mode)) g.FillRectangle(aGB, headerRect); } else { headerRect = new Rectangle(0, 0, Orientation == Orientation.Horizontal ? Width - 1 : CollapsedSize - 1, Orientation == Orientation.Horizontal ? CollapsedSize - 1 : Height - 1); using (LinearGradientBrush aGB = new LinearGradientBrush(headerRect, ExpandColorFrom, ExpandColorTo, mode)) g.FillRectangle(aGB, headerRect); } // Image expandCollapsIndicator = Collapsed ? ExpandImage : CollapseImage; int imageOffset = 10; // draw image if (expandCollapsIndicator != null) { // where will the image be located Point imageLocation; if (Orientation == System.Windows.Forms.Orientation.Horizontal) { imageOffset += expandCollapsIndicator.Width; imageLocation = new Point(Width - (expandCollapsIndicator.Width + 10), (CollapsedSize - expandCollapsIndicator.Height) / 2); headerRect = new Rectangle(headerRect.Left, headerRect.Top, headerRect.Right - imageOffset, headerRect.Bottom); } else { imageOffset += expandCollapsIndicator.Height; imageLocation = new Point((CollapsedSize - expandCollapsIndicator.Height) / 2, 10); headerRect = new Rectangle(headerRect.Left, headerRect.Top + imageOffset, headerRect.Right, headerRect.Bottom - imageOffset); } // draw images if they are set g.DrawImage(expandCollapsIndicator, imageLocation); } // draw text SolidBrush fntBrush = new SolidBrush(HeaderForeColor); StringFormat format = new StringFormat(); format.Alignment = HeaderTextAlign; format.LineAlignment = StringAlignment.Center; format.Trimming = StringTrimming.EllipsisWord; if (Orientation == Orientation.Vertical) { format.FormatFlags = StringFormatFlags.DirectionVertical; g.TranslateTransform(headerRect.Right, headerRect.Bottom + headerRect.Top, MatrixOrder.Prepend); g.RotateTransform(180); } if (RightToLeft == System.Windows.Forms.RightToLeft.Yes) { format.FormatFlags = format.FormatFlags | StringFormatFlags.DirectionRightToLeft; } g.DrawString(HeaderText, HeaderFont, fntBrush, headerRect, format); if (Orientation == Orientation.Vertical) { g.ResetTransform(); } }
public void rotate(float angle) { dg.RotateTransform(angle); }
public static System.IO.MemoryStream GenerateCheckCode(out string checkCode) { checkCode = string.Empty; System.Drawing.Color color = System.Drawing.ColorTranslator.FromHtml("#1AE61A"); char[] array = new char[] { '2', '3', '4', '5', '6', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', 'X', 'Y' }; System.Random random = new System.Random(); for (int i = 0; i < 4; i++) { checkCode += array[random.Next(array.Length)]; } int width = 85; System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(width, 30); System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap); System.Random random2 = new System.Random(System.DateTime.Now.Millisecond); System.Drawing.Brush brush = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(4683611)); graphics.Clear(System.Drawing.ColorTranslator.FromHtml("#EBFDDF")); using (System.Drawing.StringFormat stringFormat = new System.Drawing.StringFormat()) { stringFormat.Alignment = System.Drawing.StringAlignment.Center; stringFormat.LineAlignment = System.Drawing.StringAlignment.Center; stringFormat.FormatFlags = System.Drawing.StringFormatFlags.NoWrap; System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix(); float num = -25f; float num2 = 0f; graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; for (int i = 0; i < checkCode.Length; i++) { int num3 = random2.Next(20, 24); System.Drawing.Font font = ImageHelper.CreateFont(IOHelper.GetMapPath("/fonts/checkCode.ttf"), (float)num3, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, 0); System.Drawing.SizeF sizeF = graphics.MeasureString(checkCode[i].ToString(), font); matrix.RotateAt((float)random2.Next(-15, 10), new System.Drawing.PointF(num + sizeF.Width / 2f, num2 + sizeF.Height / 2f)); graphics.Transform = matrix; graphics.DrawString(checkCode[i].ToString(), font, System.Drawing.Brushes.Green, new System.Drawing.RectangleF(num, num2, (float)bitmap.Width, (float)bitmap.Height), stringFormat); num += sizeF.Width * 3f / 5f; num2 += 0f; graphics.RotateTransform(0f); matrix.Reset(); font.Dispose(); } } System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.Black, 0f); System.IO.MemoryStream memoryStream = new System.IO.MemoryStream(); System.IO.MemoryStream result; try { bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); result = memoryStream; } finally { bitmap.Dispose(); graphics.Dispose(); } return(result); }