【发布时间】:2011-01-12 16:30:40
【问题描述】:
这个seems to be in infamous error。我记得不久前得到了不同的代码,但它回来了,带着复仇,但有一些我似乎无法弄清楚的新代码。
肯定是generic!
目标
我正在尝试构建一个允许用户:
- 选择一张图片。
- 按保存(关闭表单),并将图像保存到
byte[]到数据库中。 - 打开表单(从
byte[]加载图像)。 - 让他们再次按保存。
- 允许他们再次打开表单,显示图像(再次)。
一个非常标准的加载/保存场景。
问题
在加载和保存到 SQL Server 方面一切正常。我遇到的问题是与byte[] 之间反复加载和保存有关,即使我使用的是相同的设置。看看我为演示问题而模拟的这段代码:
static void Main(string[] args)
{
// Load the image
var initialImage = (Bitmap)Bitmap.FromFile(@"D:\picture.jpg");
// Save to a memory stream and get the bytes
var initialImageBytes = SaveImageToBytes(initialImage);
// Load again from this saved image
Bitmap byteLoadedImage = LoadImageFromBytes(initialImageBytes);
// Save again to bytes, throws "A generic error occurred in GDI+."
var secondaryImageBytes = SaveImageToBytes(byteLoadedImage);
}
private static byte[] SaveImageToBytes(Bitmap image)
{
byte[] imageBytes;
using (MemoryStream imageStream = new MemoryStream())
{
image.Save(imageStream, image.RawFormat);
// "A generic error occurred in GDI+." thrown when saved second time
imageBytes = imageStream.ToArray();
}
return imageBytes;
}
private static Bitmap LoadImageFromBytes(byte[] bytes)
{
using (MemoryStream imageStream = new MemoryStream(bytes))
{
Bitmap image = (Bitmap)Bitmap.FromStream(imageStream);
return image;
}
}
第二次将图像再次保存到MemoryStream 时抛出错误A generic error occurred in GDI+.。我通过检查第一次保存之前和第二次保存之前的值来检查这与RawFormat 无关:
1st Save : {b96b3cae-0728-11d3-9d7b-0000f81ef32e}
2nd Save : {b96b3cae-0728-11d3-9d7b-0000f81ef32e}
值相同,因此丢失ImageFormat 信息不会有问题。
谁能帮助调试这个问题?我使用的代码示例是用 JPEG 和you can get it here 测试的。
【问题讨论】: