【发布时间】:2012-02-07 12:03:19
【问题描述】:
我必须从数据库中读取图像二进制文件并将此图像二进制文件保存为文件系统上的 Tiff 图像。我正在使用以下代码
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 提示的图像二进制文件。这将返回具有 1 字节数据的 ImageBytes,并将其保存为 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 字节或不完整,则不会保存图像,并将成功返回 false。
我无法删除 NOLOCK,因为我们有极端锁定。
第二个代码比第一个代码慢。我尝试了 500 张图像。相差 5 秒。
我无法理解这 2 段代码之间的区别以及何时使用哪个代码。请帮我理解。
【问题讨论】:
-
当然比较慢,Image.FromStream() 不便宜。您不能只检查 ImageBytes.Length 的合理值吗?