这似乎是整个网络上一个臭名昭着的错误.因为我的情景不适合,所以我无法找到问题的答案.将图像保存到流时会抛出异常.
奇怪的是这与png完美配合,但是jpg和gif给出了上述错误,这是相当混乱的.
最相似的问题涉及将图像保存到没有权限的文件.具有讽刺意味的是,解决方案是使用内存流,因为我正在做....
public static byte[] ConvertImageToByteArray(Image imageToConvert)
{
using (var ms = new MemoryStream())
{
ImageFormat format;
switch (imageToConvert.MimeType())
{
case "image/png":
format = ImageFormat.Png;
break;
case "image/gif":
format = ImageFormat.Gif;
break;
default:
format = ImageFormat.Jpeg;
break;
}
imageToConvert.Save(ms, format);
return ms.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
更多细节到例外.造成这么多问题的原因是缺乏解释:(
System.Runtime.InteropServices.ExternalException was unhandled by user code
Message="A generic error occurred in GDI+."
Source="System.Drawing"
ErrorCode=-2147467259
StackTrace:
at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(Stream stream, ImageFormat format)
at Caldoo.Infrastructure.PhotoEditor.ConvertImageToByteArray(Image imageToConvert) in C:\Users\Ian\SVN\Caldoo\Caldoo.Coordinator\PhotoEditor.cs:line 139
at …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET C#页面,我正在调整文件夹中的图像.我正在使用GDI +来执行此操作.我想调整图像大小并替换旧图像.所以当我尝试使用现有名称保存时,Save方法抛出一个错误.但是,如果我给出一个不同的名称,它将被保存.但我想为新创建的已调整大小的图像具有相同的文件名,因为我需要使用调整大小的新文件覆盖现有文件.知道如何继续.我的代码是
oldImagePath= oldImagePath.Replace(".jpg", "NEW.jpg");
try
{
ImageCodecInfo[] Info = ImageCodecInfo.GetImageEncoders();
EncoderParameters Params = new EncoderParameters(1);
Params.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
target.Save(oldImagePath, Info[1], Params);
}
Run Code Online (Sandbox Code Playgroud)
如果我评论第一行为目标文件创建一个新名称,IT将无法正常工作.,其他人会想到它.但我想拥有相同的名称.任何想法??提前致谢