避免覆盖图像文件并创建一个新文件
Avoid overwriting of Image file and Create a new One
我正在使用 AForge 框架在捕获图像后将图像捕获到网络摄像头。用户将确认 he/she 是否想要它作为他的图像。如果是,图像将保存在我的项目目录中。
这是我保存图像时出现的问题,它覆盖了第一个图像
我想要的是在创建新图像时创建一个新文件,但我不知道该怎么做。
例如:
第一个图像将保存为 Image01,然后新图像将保存为 Image02 以此类推..
这是我的代码
ImageHelper img = new ImageHelper();
private void ImageCapture_Load(object sender, EventArgs e)
{
img.ImageSettings
(
img._captureDevice,
img.finalFrame,
cboxWebcamType
);
img.finalFrame.NewFrame += new NewFrameEventHandler(FinalFrame_NewFrame);
btnOk.Hide();
btnCancel.Hide();
}
private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
picPreviewImage.Image = (Bitmap)eventArgs.Frame.Clone();
}
private void ImageCapture_FormClosing(object sender, FormClosingEventArgs e)
{
if (img.finalFrame.IsRunning == true)
img.finalFrame.Stop();
}
private void BtnCapture_Click(object sender, EventArgs e)
{
picCapturedImage.Image = (Bitmap)picPreviewImage.Image.Clone();
picCapturedImage.BringToFront();
btnCapture.Hide();
btnOk.Show();
btnCancel.Show();
}
private void BtnOk_Click(object sender, EventArgs e)
{
if (picCapturedImage.Image != null)
{
var bitmap = new Bitmap(picCapturedImage.Image);
var newBitmap = new Bitmap(bitmap);
bitmap.Save(@"..\..\Resources\Image01.Png", ImageFormat.Png);
bitmap.Dispose();
bitmap = null;
}
Close();
}
private void BtnCancel_Click(object sender, EventArgs e)
{
Close();
}
如果您想要一些简单的东西并且不想保持有多少张图片的状态,您可以遍历文件名直到找到一个唯一的文件。
private void BtnOk_Click(object sender, EventArgs e)
{
if (picCapturedImage.Image != null)
{
using (var bitmap = new Bitmap(picCapturedImage.Image))
{
for (int i = 0; i < int.MaxValue; i++)
{
var fileName = @$"..\..\Resources\Image{i}.png";
if (!File.Exists(fileName))
{
bitmap.Save(fileName, ImageFormat.Png);
break;
}
}
}
}
Close();
}
你可以把你的方法改成这样
private void BtnOk_Click(object sender, EventArgs e)
{
if (picCapturedImage.Image != null)
{
var bitmap = new Bitmap(picCapturedImage.Image);
var newBitmap = new Bitmap(bitmap);
string imageName=@"..\..\Resources\"+ "-" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss-fff")+".Png"
bitmap.Save(imageName, ImageFormat.Png);
bitmap.Dispose();
bitmap = null;
}
Close();
}
这样可以将当前日期和时间添加到图像名称中,您始终可以确保它是唯一的,当然还有很多其他方法可以做到这一点。希望对你有帮助
我正在使用 AForge 框架在捕获图像后将图像捕获到网络摄像头。用户将确认 he/she 是否想要它作为他的图像。如果是,图像将保存在我的项目目录中。
这是我保存图像时出现的问题,它覆盖了第一个图像
我想要的是在创建新图像时创建一个新文件,但我不知道该怎么做。
例如: 第一个图像将保存为 Image01,然后新图像将保存为 Image02 以此类推..
这是我的代码
ImageHelper img = new ImageHelper();
private void ImageCapture_Load(object sender, EventArgs e)
{
img.ImageSettings
(
img._captureDevice,
img.finalFrame,
cboxWebcamType
);
img.finalFrame.NewFrame += new NewFrameEventHandler(FinalFrame_NewFrame);
btnOk.Hide();
btnCancel.Hide();
}
private void FinalFrame_NewFrame(object sender, NewFrameEventArgs eventArgs)
{
picPreviewImage.Image = (Bitmap)eventArgs.Frame.Clone();
}
private void ImageCapture_FormClosing(object sender, FormClosingEventArgs e)
{
if (img.finalFrame.IsRunning == true)
img.finalFrame.Stop();
}
private void BtnCapture_Click(object sender, EventArgs e)
{
picCapturedImage.Image = (Bitmap)picPreviewImage.Image.Clone();
picCapturedImage.BringToFront();
btnCapture.Hide();
btnOk.Show();
btnCancel.Show();
}
private void BtnOk_Click(object sender, EventArgs e)
{
if (picCapturedImage.Image != null)
{
var bitmap = new Bitmap(picCapturedImage.Image);
var newBitmap = new Bitmap(bitmap);
bitmap.Save(@"..\..\Resources\Image01.Png", ImageFormat.Png);
bitmap.Dispose();
bitmap = null;
}
Close();
}
private void BtnCancel_Click(object sender, EventArgs e)
{
Close();
}
如果您想要一些简单的东西并且不想保持有多少张图片的状态,您可以遍历文件名直到找到一个唯一的文件。
private void BtnOk_Click(object sender, EventArgs e)
{
if (picCapturedImage.Image != null)
{
using (var bitmap = new Bitmap(picCapturedImage.Image))
{
for (int i = 0; i < int.MaxValue; i++)
{
var fileName = @$"..\..\Resources\Image{i}.png";
if (!File.Exists(fileName))
{
bitmap.Save(fileName, ImageFormat.Png);
break;
}
}
}
}
Close();
}
你可以把你的方法改成这样
private void BtnOk_Click(object sender, EventArgs e)
{
if (picCapturedImage.Image != null)
{
var bitmap = new Bitmap(picCapturedImage.Image);
var newBitmap = new Bitmap(bitmap);
string imageName=@"..\..\Resources\"+ "-" + DateTime.Now.ToString("yyyy-MM-dd-hh-mm-ss-fff")+".Png"
bitmap.Save(imageName, ImageFormat.Png);
bitmap.Dispose();
bitmap = null;
}
Close();
}
这样可以将当前日期和时间添加到图像名称中,您始终可以确保它是唯一的,当然还有很多其他方法可以做到这一点。希望对你有帮助