public override void Run() { using (var bitmap = new Bitmap(Dimensions.Width, Dimensions.Height)) { using (var img = Resources.GetBitmap(Resources.BitmapResources.compass2)) { int da = 3; for (int angle = 0; angle <= 360 && angle >= 0; angle += da) { bitmap.DrawRectangle(Colors.White, 0, 0, 0, Dimensions.Width, Dimensions.Height, 0, 0, Colors.White, 0, 0, Colors.White, 0, 0, Bitmap.OpacityOpaque); int xdst = (Dimensions.Width - img.Width)/2, ydst = (Dimensions.Height - img.Height)/2; bitmap.RotateImage(angle, xdst, ydst, img, 0, 0, img.Width, img.Height, 0x00); bitmap.Flush(); if (angle > 180) da = -da; } } } }
public void RotateImage(int angle, int destinationX, int destinationY, Bitmap bitmap, int sourceX, int sourceY, int sourceWidth, int sourceHeight, ushort opacity) { bitmap.RotateImage(angle, translationX + destinationX, translationY + destinationY, bitmap, sourceX, sourceY, sourceWidth, sourceHeight, opacity); }
/// <summary> /// Handles multi-touch gesture events. Multitouch gestures are performed on the emulator by /// holding down CTRL+[Z|P|R] and inking (to change the angle/zoom level). /// </summary> /// <param name="e">Touch gesture event data</param> protected override void OnTouchGestureChanged(TouchGestureEventArgs e) { base.OnTouchGestureChanged(e); Bitmap b; switch (e.Gesture) { /// /// Zoom gesture magnifies the original bitmap by the gesture value contained in e.Arguments /// case TouchGesture.Zoom: if (_bmpGesture != null) { b = new Bitmap(_bitmap.Width, _bitmap.Height); b.DrawRectangle(Color.Black, 1, 0, 0, b.Width - 2, b.Height - 2, 0, 0, Color.White, 0, 0, Color.White, b.Width, b.Height, Bitmap.OpacityOpaque); b.StretchImage(-(e.Arguments), -(e.Arguments), _bmpGesture, _bmpGesture.Width + 2 * (e.Arguments), _bmpGesture.Height + 2 * (e.Arguments), Bitmap.OpacityOpaque); _bitmap = b; Invalidate(); } break; /// /// Pan (zoom out) gesture shrinks the original bitmap by the gesture value contained in e.Arguments /// case TouchGesture.Pan: if (_bmpGesture != null) { b = new Bitmap(_bitmap.Width, _bitmap.Height); b.DrawRectangle(Color.Black, 1, 0, 0, b.Width - 2, b.Height - 2, 0, 0, Color.White, 0, 0, Color.White, b.Width, b.Height, Bitmap.OpacityOpaque); b.StretchImage((e.Arguments), (e.Arguments), _bmpGesture, _bmpGesture.Width - 2 * (e.Arguments), _bmpGesture.Height - 2 * (e.Arguments), Bitmap.OpacityOpaque); _bitmap = b; Invalidate(); } break; /// /// Rotate gesture spins the original bitmap by the gesture value contained in e.Angle (0-360). /// case TouchGesture.Rotate: if (_bmpGesture != null) { b = new Bitmap(_bitmap.Width, _bitmap.Height); b.DrawRectangle(Color.Black, 1, 0, 0, b.Width, b.Height, 0, 0, Color.White, 0, 0, Color.White, b.Width, b.Height, Bitmap.OpacityOpaque); b.RotateImage((int)e.Angle, 1, 1, _bmpGesture, 1, 1, _bmpGesture.Width - 2, _bmpGesture.Height - 2, Bitmap.OpacityOpaque); _bitmap = b; Invalidate(); } break; } }