C# 将大量(约1000-2000)Jpeg图像合并为一个

C# 将大量(约1000-2000)Jpeg图像合并为一个,c#,graphics,bitmap,gdi,C#,Graphics,Bitmap,Gdi,我现在正在使用下面的代码,它可以处理大约300幅图像,但我必须合并1000多幅图像 private static void CombineThumbStripImages(string[] imageFiles) { int index = 0; using (var result = new Bitmap(192 * imageFiles.Length, 112)) { using (var graphics = Graphics.FromImage(r

我现在正在使用下面的代码,它可以处理大约300幅图像,但我必须合并1000多幅图像

private static void CombineThumbStripImages(string[] imageFiles)
{
    int index = 0;
    using (var result = new Bitmap(192 * imageFiles.Length, 112))
    {
        using (var graphics = Graphics.FromImage(result))
        {
            graphics.Clear(Color.White);
            int leftPosition = 0;
            for (index = 0; index < imageFiles.Length; index++)
            {
                string file = imageFiles[index];
                using (var image = new Bitmap(file))
                {
                    var rect = new Rectangle(leftPosition, 0, 192, 112);
                    graphics.DrawImage(image, rect);
                    leftPosition += 192;
                }
            }
        }
        result.Save("result.jpg", ImageFormat.Jpeg);
    }
}

有人能帮忙吗?

为什么不使用xna或opengl之类的工具来完成这项工作

我知道你可以用纹理2D。。。正如我目前正在学习opengl一样,我想你可以使用它,但不知道如何使用

(公共文件上保存为JPEG)

我做了一些类似于制作雪碧床单的事情,你基本上可以使用任何细分或组织算法来优化空间使用,创建一个巨大的纹理2D。但是有很多方法可以做到这一点

比如


可能只需要几个小时。XNA v容易,特别是当你只是依靠外部的时候。这样做应该很好。

问题在于这行代码

result.Save("result.jpg", ImageFormat.Jpeg);
看起来它在保存jpeg/png格式时出错。我已将您的代码副本加载到VS2008+Windows 7中

如果要使用相同的代码,请将图像格式更改为bmp或tiff

result.Save("result.bmp", ImageFormat.Bmp); // this works, but the file size is huge


我不能,但我确实记得收到了那个错误,因为源图像的格式是windows/GDI不喜欢的,我对此无能为力。我能够在MS paint中打开它并保存它,然后就可以工作了,但我不知道如何在命令行上使用它。我尝试使用imagemagick convert来修复它,但无论我做了什么,它都没有解决问题,我发布了一个没有答案的问题。很有可能你在GDI+中遇到了限制。试着看看开源图像处理软件包,比如aforge.net(www.aforgenet.com/framework/‎). 如果您只是想创建一个马赛克,而不需要自己编写代码,我已经成功地使用了(免费供个人使用)。但是,如果您不需要在.NET中加载图像,则可以使用imagicmagick或缩略图命令行工具。我无法立即想到任何方法,但我知道irfanview可以将多个图像合并到单个图像中,并且可以在命令行上执行此操作。它何时引发异常?在开始或结束时经过几次迭代(我假设后者会考虑您所说的)?可能是您正在加载不受支持的格式,或者图形对象内存不足。我真的不知道GDI如何处理此问题,但几个断点可能有助于确定问题。在追加342(192 px)时会引发异常文件,但不是341。342个图像的结果位图图像的宽度为65664。341个图像的位图宽度为65472。GDI+可能对宽度和高度使用无符号短整型,其最大值为65536。
result.Save("result.bmp", ImageFormat.Bmp); // this works, but the file size is huge
result.Save("result.tiff", ImageFormat.Tiff); // this also works, files is not as big