避免覆盖图像文件并创建新文件

问题描述 投票:0回答:2

在捕获图像后,我正在使用AForge框架将图像捕获到网络摄像头。用户将确认他/她是否想要它作为他的图像。如果是,图像将保存在我的项目目录中。

这是我保存图像时覆盖第一个问题的问题

我想要的是在创建新图像时创建一个新文件,但我不知道我将如何做到这一点。

例如:第一个图像将保存为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();
    }
c# winforms aforge
2个回答
2
投票

如果你想要一些简单的东西并且不想保持你有多少张图片的状态,你可以循环浏览文件名,直到找到一个独特的图片。

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();
}


1
投票

你可以把你的方法改成这样的东西

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();
    }

这样,当前日期和时间添加到图像名称,您可以始终确保它是唯一的,但当然还有很多其他方法可以做到这一点。希望能帮助到你

© www.soinside.com 2019 - 2024. All rights reserved.