参数无效。 System.Drawing.Bitmap..ctor(Stream stream) 的堆栈跟踪
Parameter is not valid. Stack Trace at System.Drawing.Bitmap..ctor(Stream stream)
仅在某些情况下我会收到此错误。 "Parameter is not valid Stack Trace at System.Drawing.Bitmap..ctor(Stream stream)" 我有点困惑它是如何为某些记录工作的,为什么不为其他记录工作。任何人请指导我发现我的错误将非常有帮助..,
以下是我的代码。,
private void RefreshImage()
{
if (this.dsPatPhoto.dmDoc.Count <= 0) return;
byte[] patImage = null;
byte[] driverLicImage = null;
foreach (CmData.WrCmDoc.DsCmDoc.dmDocRow row in this.dsPatPhoto.dmDoc)
{
if (!row.IsIDDocTypeNull() &&
row.IDDocType == (short)AppCommonCfg.DocType.PatientDriverLicense)
{
if (!row.IsDocImageNull())
driverLicImage = row.DocImage;
}
else
{
if (!row.IsDocImageNull())
patImage = row.DocImage;
}
}
System.IO.MemoryStream stream;
if (patImage != null && patImage.Length > 0)
{
stream = new System.IO.MemoryStream(patImage, true);
this.ucPictureEditPic.Clear();
this.ucPictureEditPic.Image = new System.Drawing.Bitmap(stream);
}
if (driverLicImage != null && driverLicImage.Length > 0)
{
stream = new System.IO.MemoryStream(driverLicImage, true);
this.ucPictureEditDL.Clear();
this.ucPictureEditDL.Image = new System.Drawing.Bitmap(stream); //Error occurs here.
}
}
使用构造函数可能抛出的 Reference Source we can see that the bitmap class is using GDI+ native methods for constructing the image. From the reference source we can also see the list of exceptions。在所有可以抛出的异常中,有 8 个地方可能来自 ArgumentException。
- 流为空。
- 参数无效。
- 未知图像格式。
- 属性 未找到。
- 属性 不支持。
- 未找到字体系列。
- 未找到字体样式。
- 不是 True Type 字体。
我们可以立即删除 #6-8,因为您没有尝试渲染字体。我们还可以消除#1,因为流对象是在调用位图构造函数之前立即创建的。数字 2、4 和 5 的评估稍微复杂一些,但我已将它们排除在外,因为内存流对于构建位图是有效的。 (我经常将它用作渲染基于 Web 的图像的方法。)
这给我们留下了未知的图像格式。有两种方法可以检查字节数组是否有效。
从文件加载图像副本并将字节与 DataSet
.
中的字节进行比较
if (driverLicImage != null && driverLicImage.Length > 0)
{
byte[] knownGoodImage = System.IO.File.ReadAllBytes("Path to good file on disk");
if (!driverLicImage.SequenceEqual(knownGoodImage))
{
// now you know that the bytes in the database don't match
}
stream = new System.IO.MemoryStream(driverLicImage, true);
this.ucPictureEditDL.Clear();
this.ucPictureEditDL.Image = new System.Drawing.Bitmap(stream); //Error occurs here.
}
捕获构造函数异常并将文件保存到磁盘,以便您可以尝试使用图像编辑器打开它。 (类似于 MS 画图)
if (driverLicImage != null && driverLicImage.Length > 0)
{
try
{
stream = new System.IO.MemoryStream(driverLicImage, true);
this.ucPictureEditDL.Clear();
this.ucPictureEditDL.Image = new System.Drawing.Bitmap(stream); //Error occurs here.
}
catch (ArgumentException ex)
{
System.Diagnostics.Debug.Print(ex.Message);
System.IO.File.WriteAllBytes("Filename", driverLicImage);
}
}
当然你会想要选择一个合适的文件名。
仅在某些情况下我会收到此错误。 "Parameter is not valid Stack Trace at System.Drawing.Bitmap..ctor(Stream stream)" 我有点困惑它是如何为某些记录工作的,为什么不为其他记录工作。任何人请指导我发现我的错误将非常有帮助..,
以下是我的代码。,
private void RefreshImage()
{
if (this.dsPatPhoto.dmDoc.Count <= 0) return;
byte[] patImage = null;
byte[] driverLicImage = null;
foreach (CmData.WrCmDoc.DsCmDoc.dmDocRow row in this.dsPatPhoto.dmDoc)
{
if (!row.IsIDDocTypeNull() &&
row.IDDocType == (short)AppCommonCfg.DocType.PatientDriverLicense)
{
if (!row.IsDocImageNull())
driverLicImage = row.DocImage;
}
else
{
if (!row.IsDocImageNull())
patImage = row.DocImage;
}
}
System.IO.MemoryStream stream;
if (patImage != null && patImage.Length > 0)
{
stream = new System.IO.MemoryStream(patImage, true);
this.ucPictureEditPic.Clear();
this.ucPictureEditPic.Image = new System.Drawing.Bitmap(stream);
}
if (driverLicImage != null && driverLicImage.Length > 0)
{
stream = new System.IO.MemoryStream(driverLicImage, true);
this.ucPictureEditDL.Clear();
this.ucPictureEditDL.Image = new System.Drawing.Bitmap(stream); //Error occurs here.
}
}
使用构造函数可能抛出的 Reference Source we can see that the bitmap class is using GDI+ native methods for constructing the image. From the reference source we can also see the list of exceptions。在所有可以抛出的异常中,有 8 个地方可能来自 ArgumentException。
- 流为空。
- 参数无效。
- 未知图像格式。
- 属性 未找到。
- 属性 不支持。
- 未找到字体系列。
- 未找到字体样式。
- 不是 True Type 字体。
我们可以立即删除 #6-8,因为您没有尝试渲染字体。我们还可以消除#1,因为流对象是在调用位图构造函数之前立即创建的。数字 2、4 和 5 的评估稍微复杂一些,但我已将它们排除在外,因为内存流对于构建位图是有效的。 (我经常将它用作渲染基于 Web 的图像的方法。)
这给我们留下了未知的图像格式。有两种方法可以检查字节数组是否有效。
从文件加载图像副本并将字节与
中的字节进行比较DataSet
.if (driverLicImage != null && driverLicImage.Length > 0) { byte[] knownGoodImage = System.IO.File.ReadAllBytes("Path to good file on disk"); if (!driverLicImage.SequenceEqual(knownGoodImage)) { // now you know that the bytes in the database don't match } stream = new System.IO.MemoryStream(driverLicImage, true); this.ucPictureEditDL.Clear(); this.ucPictureEditDL.Image = new System.Drawing.Bitmap(stream); //Error occurs here. }
捕获构造函数异常并将文件保存到磁盘,以便您可以尝试使用图像编辑器打开它。 (类似于 MS 画图)
if (driverLicImage != null && driverLicImage.Length > 0) { try { stream = new System.IO.MemoryStream(driverLicImage, true); this.ucPictureEditDL.Clear(); this.ucPictureEditDL.Image = new System.Drawing.Bitmap(stream); //Error occurs here. } catch (ArgumentException ex) { System.Diagnostics.Debug.Print(ex.Message); System.IO.File.WriteAllBytes("Filename", driverLicImage); } }
当然你会想要选择一个合适的文件名。