我现在正在使用以下代码,它适用于约300张图片,但我必须合并超过一千张。
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);
}
}
抛出以下异常:
An unhandled exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll
Additional information: A generic error occurred in GDI+.
有人可以帮忙吗?
答案 0 :(得分:1)
为什么不使用像xna或opengl这样的东西呢?
我知道你可以使用texture2d ......而且我正在学习opengl id,想你可以用那个但不知道怎么做。
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.texture2d_members.aspx(在公共场合保存AsAsPGEG)
我做了类似于制作精灵表的东西,你基本上使用任何细分或组织算法创建一个巨大的texture2d来优化空间使用。有很多方法可以做到这一点。
等等 http://xbox.create.msdn.com/en-US/education/catalog/sample/sprite_sheet可能只需要几个小时的时间。如果你只是依靠外部,XNA很容易。这样做应该会很好。
答案 1 :(得分:0)
问题在于这行代码。
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
或
result.Save("result.tiff", ImageFormat.Tiff); // this also works, files is not as big