未能保存所有字节数组为png图片命名他们与时间戳
本文关键字:他们 时间戳 png 保存 字节 数组 字节数 | 更新日期: 2023-09-27 17:49:33
我试图将所有blob保存为png图片,但当我用当前时间戳命名png时,似乎保存过程中有超时并且只有最后一个blob成功。如果我设置2秒延迟,只有它可以保存所有
reportthread_image
是从mysql数据库中检索到的blob(在本例中为4 blob)的List<byte[]>
。
foreach (byte[] rt_image in reportthread_image)
{
if (rt_image.Count() != 0)
{
try
{
ms = new MemoryStream(rt_image);
fullsizeImage = Image.FromStream(ms);
newImage = fullsizeImage.GetThumbnailImage(pictureBox1.Width, pictureBox1.Height, null, IntPtr.Zero);
pictureBox1.Image = newImage;
bm = new Bitmap(pictureBox1.Image);
count++;
//only can save last image without delay
//Thread.Sleep(2000); //need long enough delay to save all
//bm.Save(DateTime.Now.ToString("yyMMddHHmmss") + ".png", ImageFormat.Png);//can save all blobs to png.
bm.Save(count + ".png", ImageFormat.Png);//no error will occurs here.
ms.Dispose();
bm.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
我可以知道,我怎么能保存图像与当前时间戳,只进行下一个元素后完成保存过程在reportthread_image?我试过lock(),我试过Invoked()
而我却看不懂
为什么进程不等待保存进程完成只进行下一行??
因为您覆盖了先前保存的文件。在文件名中包含毫秒数,请放心。
bm.Save(DateTime.Now.ToString("yyMMddHHmmssfff") + ".png", ImageFormat.Png);
我认为睡眠线程不是一个好主意。为了更准确,您必须在生成的名称中使用保证可变因子,因为DateTame
的准确性不够。像这样:
bm.Save(DateTime.Now.ToString("yyMMddHHmmss") + "_" + count++ + ".png", ImageFormat.Png);
然后