如何从函数返回新图像?

时间:2016-01-19 20:30:10

标签: c# .net winforms

我添加了

if (newWidth >= 1 && newHeight >= 1)

现在我收到了错误

错误1' Images_Batch_Resize.Form1.ResizeImage(string,int,int)&#39 ;:并非所有代码路径都返回值

private static Bitmap ResizeImage(String filename, int maxWidth, int maxHeight)
        {
            using (Image originalImage = Image.FromFile(filename))
            {
                //Caluate new Size
                int newWidth = originalImage.Width;
                int newHeight = originalImage.Height;
                double aspectRatio = (double)originalImage.Width / (double)originalImage.Height;
                if (aspectRatio <= 1 && originalImage.Width > maxWidth)
                {
                    newWidth = maxWidth;
                    newHeight = (int)Math.Round(newWidth / aspectRatio);
                }
                else if (aspectRatio > 1 && originalImage.Height > maxHeight)
                {
                    newHeight = maxHeight;
                    newWidth = (int)Math.Round(newHeight * aspectRatio);
                }
                if (newWidth >= 1 && newHeight >= 1)
                {
                    Bitmap newImage = new Bitmap(newWidth, newHeight);
                    using (Graphics g = Graphics.FromImage(newImage))
                    {
                        //--Quality Settings Adjust to fit your application
                        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                        g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
                        return newImage;
                    }
                }
            }

2 个答案:

答案 0 :(得分:1)

您收到该错误,因为该函数不会始终返回值。如果newWidth不是> = 1或newHeight不是&gt; = 1,那么它将无法返回任何内容。如果它不符合这些要求,您将要返回null或类似的东西,以便您知道出现问题。

答案 1 :(得分:1)

仅在if(最后一个)中返回值。将return语句添加到其他if或此函数末尾添加类似return null

的内容
private static Bitmap ResizeImage(String filename, int maxWidth, int maxHeight)
    {
        using (Image originalImage = Image.FromFile(filename))
        {
            //Caluate new Size
            int newWidth = originalImage.Width;
            int newHeight = originalImage.Height;
            double aspectRatio = (double)originalImage.Width / (double)originalImage.Height;
            if (aspectRatio <= 1 && originalImage.Width > maxWidth)
            {
                newWidth = maxWidth;
                newHeight = (int)Math.Round(newWidth / aspectRatio);
            }
            else if (aspectRatio > 1 && originalImage.Height > maxHeight)
            {
                newHeight = maxHeight;
                newWidth = (int)Math.Round(newHeight * aspectRatio);

            }
            if (newWidth >= 1 && newHeight >= 1)
            {
                Bitmap newImage = new Bitmap(newWidth, newHeight);
                using (Graphics g = Graphics.FromImage(newImage))
                {
                    //--Quality Settings Adjust to fit your application
                    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBilinear;
                    g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                    g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
                    g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
                    g.DrawImage(originalImage, 0, 0, newImage.Width, newImage.Height);
                    return newImage;
                }
            }
            return null ( or something ) 
        }

在你的代码中,如果代码没有点击最后if,它将不会返回任何值,但是你减速这个方法将在最后返回Bitmap,所以编译想要在每种情况下将返回某种Bitmap函数的用户(即使是null