コード例 #1
0
        /*
        private static void ApplyTransform(string imageName, string imagePath, string transformType)
        {
            int resX = transformType.X;
            int resY = transformType.Y;
            string saveAsPath = transformType.SaveAsPath;

            Image origImage = loadImage(imageName, imagePath);
            float resYPom = ((float)origImage.Height / (float)origImage.Width);
            resYPom = resYPom * resX;

            if (resY == 0)
            {
                resY = Convert.ToInt32(resYPom);
            }

            Bitmap thumbImage;
            Graphics g;

            switch (transformType)
            {
                case "resizeByLongerSide":
                    float origResX = origImage.Width;
                    float origResY = origImage.Height;

                    if (origResX > origResY)
                    {
                        resY = Convert.ToInt32((origResY / origResX) * resX);
                    }
                    else
                    {
                        if (origResY > origResX)
                        {
                            resX = Convert.ToInt32((origResX / origResY) * resY);
                        }
                    }
                    thumbImage = GetThumbImage(origImage, resX, resY);

                    break;

                case "ResizeAndCrop":
                    thumbImage = new Bitmap(resX, resY, origImage.PixelFormat);
                    g = Graphics.FromImage(thumbImage);
                    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                    g.SmoothingMode = SmoothingMode.HighQuality;
                    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
                    g.CompositingQuality = CompositingQuality.HighQuality;

                    float origSizeX = origImage.Width;
                    float origSizeY = origImage.Height;

                    if (origSizeX == origSizeY) //ctverec, jen zmensime
                    {
                        thumbImage = GetThumbImage(origImage, resX, resY);
                    }

                    if (origSizeX >= origSizeY) //na sirku - orizneme na kazde strane pulku rozdilu (sirka - vyska)
                    {
                        int rozdil = Convert.ToInt32(origSizeX - origSizeY);
                        int rozdilPul = Convert.ToInt32(rozdil / 2);

                        g.DrawImage(origImage, new Rectangle(0, 0, resX, resY), rozdilPul, 0, (origSizeX - rozdil), origSizeY, GraphicsUnit.Pixel);
                    }
                    else // na vysku - orez se provadi v dolni casti
                    {
                        int rozdil = Convert.ToInt32(origSizeY - origSizeX);
                        g.DrawImage(origImage, new Rectangle(0, 0, resX, resY), 0, 0, origSizeX, (origSizeY - rozdil), GraphicsUnit.Pixel);
                    }

                    var simRAC1 = new SharpeningImage();
                    simRAC1.Filter(thumbImage);

                    break;
                default: //Zadne jmeno transformace nepasne, udela se jen resize
                    thumbImage = GetThumbImage(origImage, resX, resY);
                    break;
            }

            SaveImage(thumbImage, saveAsPath);

        }
        */
        private static Bitmap GetThumbImage(Image origImage, int resX, int resY)
        {
            Graphics g;
            Rectangle oRectangle;
            Bitmap thumbImage;
            thumbImage = new Bitmap(resX, resY, origImage.PixelFormat);
            g = Graphics.FromImage(thumbImage);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            g.CompositingQuality = CompositingQuality.HighQuality;

            oRectangle = new Rectangle(0, 0, resX, resY);
            g.DrawImage(origImage, oRectangle);

            if (resX < origImage.Width)
            {
                SharpeningImage si = new SharpeningImage();
                si.Filter(thumbImage);
            }

            return thumbImage;
        }
コード例 #2
0
        private static Bitmap DoResizeImage(Photo photo, PhotoType fromType, PhotoType targetType)
        {
            var fullPath = GetPhotoFullPath(photo, fromType);
            var origImage = LoadImage(fullPath);

            int resX = targetType.X;
            int resY;
            float ratio;

            //obrazek na sirku nebo ctverec:
            if (origImage.Width >= origImage.Height)
            {
                ratio = (float)origImage.Height / (float)origImage.Width;
                resY = Convert.ToInt32(resX * ratio);
            }
            else //obrazek na vysku.
            {
                if(targetType.Y.HasValue) //mam zadanou vysku
                {
                    resY = targetType.Y.Value;
                    ratio = (float)origImage.Width / (float)origImage.Height;
                    resX = Convert.ToInt32(resY * ratio);
                }
                else //pokud nemam zadanou vysku, musim to resizovat podle zadane sirky
                {
                    ratio = (float)origImage.Height / (float)origImage.Width;
                    resY = Convert.ToInt32(resX * ratio);
                }
            }

            var thumbImage = new Bitmap(resX, resY, origImage.PixelFormat);
            Graphics g = Graphics.FromImage(thumbImage);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;
            g.CompositingQuality = CompositingQuality.HighQuality;

            var oRectangle = new Rectangle(0, 0, resX, resY);
            g.DrawImage(origImage, oRectangle);

            if (resX < origImage.Width)
            {
                var si = new SharpeningImage();
                si.Filter(thumbImage);
            }

            origImage.Dispose();

            return thumbImage;
        }