Search This Blog

Wednesday 18 September 2019

Reduce & Resize image without rotation in C#


private void ReduceImageSize(double scaleFactor, Stream sourcePath, string targetPath)
        {
            const int OrientationKey = 0x112;
            const int NotSpecified = 0;
            const int NormalOrientation = 1;
            const int MirrorHorizontal = 2;
            const int UpsideDown = 3;
            const int MirrorVertical = 4;
            const int MirrorHorizontalAndRotateRight = 5;
            const int RotateLeft = 6;
            const int MirorHorizontalAndRotateLeft = 7;
            const int RotateRight = 8;

            using (var image = System.Drawing.Image.FromStream(sourcePath))
            {
                var newWidth = System.Convert.ToInt32((image.Width * scaleFactor));
                var newHeight = System.Convert.ToInt32((image.Height * scaleFactor));

                if (image.Height > 3000)
                {
                    newHeight = System.Convert.ToInt32((image.Height * 0.25));
                    newWidth = System.Convert.ToInt32((image.Width * 0.25));
                }
                if (image.Height <= 600)
                {
                    newHeight = System.Convert.ToInt32((image.Height * 1));
                    newWidth = System.Convert.ToInt32((image.Width * 1));
                }
                var thumbnailImg = new Bitmap(newWidth, newHeight);
                var thumbGraph = Graphics.FromImage(thumbnailImg);
                if (image.Height > 3000)
                {
                    thumbGraph.CompositingQuality = CompositingQuality.HighSpeed;
                    thumbGraph.SmoothingMode = SmoothingMode.HighSpeed;
                }
                else if (image.Height <= 600)
                {
                    thumbGraph.CompositingQuality = CompositingQuality.HighQuality;
                    thumbGraph.SmoothingMode = SmoothingMode.HighQuality;
                }
                else
                {
                    thumbGraph.CompositingQuality = CompositingQuality.HighQuality;
                    thumbGraph.SmoothingMode = SmoothingMode.HighQuality;
                }


                thumbGraph.InterpolationMode = InterpolationMode.High;
                var imageRectangle = new Rectangle(0, 0, newWidth, newHeight);
                thumbGraph.DrawImage(image, imageRectangle);
                if (image.PropertyIdList.Contains(OrientationKey))
                {
                    var orientation = System.Convert.ToInt32(image.GetPropertyItem(OrientationKey).Value[0]);

                    switch (orientation)
                    {
                        case NotSpecified: // Assume it is good.
                        case NormalOrientation:
                            // No rotation required.
                            break;
                        case MirrorHorizontal:
                            thumbnailImg.RotateFlip(RotateFlipType.RotateNoneFlipX);
                            break;
                        case UpsideDown:
                            thumbnailImg.RotateFlip(RotateFlipType.Rotate180FlipNone);
                            break;
                        case MirrorVertical:
                            thumbnailImg.RotateFlip(RotateFlipType.Rotate180FlipX);
                            break;
                        case MirrorHorizontalAndRotateRight:
                            thumbnailImg.RotateFlip(RotateFlipType.Rotate90FlipX);
                            break;
                        case RotateLeft:
                            thumbnailImg.RotateFlip(RotateFlipType.Rotate90FlipNone);
                            break;
                        case MirorHorizontalAndRotateLeft:
                            thumbnailImg.RotateFlip(RotateFlipType.Rotate270FlipX);
                            break;
                        case RotateRight:
                            thumbnailImg.RotateFlip(RotateFlipType.Rotate270FlipNone);
                            break;
                        default:
                            throw new NotImplementedException("An orientation of " + orientation + " isn't implemented.");
                    }
                }
                thumbnailImg.Save(targetPath, image.RawFormat);
            }
        }

2 comments:

  1. It’s my first visit to this blog, it seems that you are fond of writing since so long because the selection of topics is no nice also the information which you have mentioned here is real and impressive. Really appreciate.

    Hire Xamarin app Developers

    Xamarin Developer India

    ReplyDelete

Popular Posts