/// <summary> /// Rotate and/or flip bitmap /// </summary> /// <param name="bitmap">Image</param> /// <param name="type">Operation</param> /// <returns>Modified bitmap</returns> static public Bitmap RotateFlip(Bitmap bitmap, RotationAngle angle, FlipAxis axis) { if (bitmap == null) { throw new ArgumentNullException(); } IBitmapImage image = BitmapToIImageBitmap(bitmap); try { IBitmapImage imageBitmap = BitmapToIImageBitmap(bitmap); IBasicBitmapOps ops = (IBasicBitmapOps)imageBitmap; if (angle != 0) { ops.Rotate((float)angle, InterpolationHint.InterpolationHintDefault, out imageBitmap); Marshal.FinalReleaseComObject(ops); ops = (IBasicBitmapOps)imageBitmap; } if (axis != FlipAxis.None) { ops.Flip((axis & FlipAxis.X) == FlipAxis.X, (axis & FlipAxis.Y) == FlipAxis.Y, out imageBitmap); Marshal.FinalReleaseComObject(ops); ops = (IBasicBitmapOps)imageBitmap; } return(IBitmapImageToBitmap(imageBitmap)); } finally { Marshal.FinalReleaseComObject(image); } }
/// <summary> /// Flips image around X and/or Y axes /// </summary> /// <param name="bitmap">Image</param> /// <param name="axis">Axis or axes to flip on</param> private static Bitmap Flip(IBitmapImage image, FlipAxis axis) { Bitmap bmRet; IBitmapImage imageBitmap; IBasicBitmapOps ops = (IBasicBitmapOps)image; ops.Flip((axis & FlipAxis.X) == FlipAxis.X, (axis & FlipAxis.Y) == FlipAxis.Y, out imageBitmap); try { bmRet = IBitmapImageToBitmap(imageBitmap); } finally { Marshal.FinalReleaseComObject(imageBitmap); } return(bmRet); }
private static Bitmap Rotate(IBitmapImage image, float angle) { IBitmapImage imageBitmap; Bitmap bmRet; IBasicBitmapOps ops = (IBasicBitmapOps)image; ops.Rotate(angle, InterpolationHint.InterpolationHintDefault, out imageBitmap); try { bmRet = IBitmapImageToBitmap(imageBitmap); } finally { Marshal.FinalReleaseComObject(imageBitmap); } return(bmRet); }