首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >'System.Runtime.InteropServices.ExternalException‘

'System.Runtime.InteropServices.ExternalException‘
EN

Stack Overflow用户
提问于 2014-08-15 04:06:14
回答 1查看 3.5K关注 0票数 1

我在第70行"img3.Save(finalImage,System.Drawing.Imaging.ImageFormat.Jpeg);“上不断收到'System.Runtime.InteropServices.ExternalException‘的错误。最初我有一个程序,可以将两张照片拼接在一起,但我希望两张照片的大小相同(300Pixles X 300Pixles),所以我插入了一个方法:

代码语言:javascript
复制
public static Image resizeImage(Image imgToResize, Size size)
{
    return (Image)(new Bitmap(imgToResize, size));
}

在我的CombineImages方法中put:

代码语言:javascript
复制
img = resizeImage(img, new Size(300, 300));

但是现在我得到了一个错误。下面是我的代码:

代码语言:javascript
复制
    private void cmdCombine_Click(object sender, EventArgs e)
    {
        //Change the path to location where your images are stored.
        DirectoryInfo directory = new DirectoryInfo(@"C:\Users\Elder Zollinger\Desktop\Images");
        if (directory != null)
        {
            FileInfo[] files = directory.GetFiles();
            CombineImages(files);
        }

    }
    private void CombineImages(FileInfo[] files)
    {
        //change the location to store the final image.
        string finalImage = @"C:\Users\Elder Zollinger\Desktop\Images\Final.jpg";
        List<int> imageHeights = new List<int>();
        int nIndex = 0;
        int width = 0;
        foreach (FileInfo file in files)
        {
            Image img = Image.FromFile(file.FullName);
            img = resizeImage(img, new Size(300, 300));
            imageHeights.Add(img.Height);
            width += img.Width;
            img.Dispose();
        }
        imageHeights.Sort();
        int height = imageHeights[imageHeights.Count - 1];
        Bitmap img3 = new Bitmap(width, height);
        Graphics g = Graphics.FromImage(img3);
        g.Clear(SystemColors.AppWorkspace);
        foreach (FileInfo file in files)
        {
            Image img = Image.FromFile(file.FullName);
            if (nIndex == 0)
            {
                g.DrawImage(img, new Point(0, 0));
                nIndex++;
                width = img.Width;
            }
            else
            {
                g.DrawImage(img, new Point(width, 0));
                width += img.Width;
            }
            img.Dispose();
        }
        g.Dispose();
        img3.Save(finalImage, System.Drawing.Imaging.ImageFormat.Jpeg);
        img3.Dispose();
        imageLocation.Image = Image.FromFile(finalImage);
    }
    public static Image resizeImage(Image imgToResize, Size size)
    {
        return (Image)(new Bitmap(imgToResize, size));
    }
}

}

EN

回答 1

Stack Overflow用户

发布于 2014-08-15 04:38:05

上传图片的图片格式可能无法直接转换为Jpeg格式。调整大小时,我们要做的一件事就是将图像绘制到一个新的Graphics实例中,如下所示。请注意,前两行试图直接从原始图像实例中获取像素和图像格式-您可能会在使用CMYK和带有透明层(GIF/PNG)的图像时遇到问题。

代码语言:javascript
复制
            var pixelFormat = imgToResize.PixelFormat;
            var imageFormat = imgToResize.RawFormat;

            Bitmap b = new Bitmap(newWidth.Value, newHeight.Value, pixelFormat);
            Graphics g = Graphics.FromImage(b);

            g.SmoothingMode = SmoothingMode.AntiAlias;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.PixelOffsetMode = PixelOffsetMode.HighQuality;

            g.DrawImage(imgToResize, (float)-0.5, (float)-0.5, newWidth.Value + 1, newHeight.Value + 1);
            g.Dispose();

            b.Save(stream, imageFormat);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25316719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档