我必须从数据库读取图像二进制文件,并将此图像二进制文件保存为文件系统上的Tiff图像。我用下面的代码Image.Save和FileStream.Write()在c#中的区别
private static bool SavePatientChartImageFileStream(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME)
{
bool success = false;
try
{
using (FileStream str = new FileStream(Path.Combine(ImageFilePath, IMAGE_NAME), FileMode.Create))
{
str.Write(ImageBytes, 0, Convert.ToInt32(ImageBytes.Length));
success = true;
}
}
catch (Exception ex)
{
success = false;
}
return success;
}
由于这些图像的二进制文件正在通过合并复制传送,有时会发生该图像二进制不完全转移,我们正在发送请求与NOLOCK提示抓取图像二进制。这将返回ImageBytes中的1字节数据,并将其保存为0 kb损坏的tiff图像。
我已经改变了上面的代码: -
private static bool SavePatientChartImage(byte[] ImageBytes, string ImageFilePath, string IMAGE_NAME)
{
bool success = false;
System.Drawing.Image newImage;
try
{
using (MemoryStream stream = new MemoryStream(ImageBytes))
{
using (newImage = System.Drawing.Image.FromStream(stream))
{
newImage.Save(Path.Combine(ImageFilePath, IMAGE_NAME));
success = true;
}
}
}
catch (Exception ex)
{
success = false;
}
return success;
}
在这种情况下,如果ImageBytes为1个字节或不完整的,也不会保存图像和将返回成功为假。
我无法删除NOLOCK,因为我们正在进行极度锁定。
第二个代码比第一个代码慢。我尝试了500张图片。有5秒的差异。
我无法理解这两段代码与何时使用哪个代码之间的区别。请帮助我理解。
确定它比较慢,Image.FromStream()并不便宜。你不能只检查ImageBytes.Length的合理值吗? – 2012-02-07 12:33:15