Избегайте перезаписи файла изображения и создайте новый

#c# #winforms #aforge

#c# #winforms #aforge

Вопрос:

Я использую платформу 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(@"....ResourcesImage01.Png", ImageFormat.Png);

            bitmap.Dispose();
            bitmap = null;
        }


        Close();
    }
    private void BtnCancel_Click(object sender, EventArgs e)
    {
        Close();
    }
  

Комментарии:

1. Вместо того, чтобы использовать один фиксированный строковый литерал для пути к файлу в вашем коде, используйте string.format или простую конкатенацию строк (например string myString = "Dang" someNumberVariable ), чтобы динамически создавать имя файла в соответствии с вашими потребностями (примечание: вы также можете рассмотреть возможность использования System.IO.Path.Combine при динамическом создании пути из имени файла и компонентов каталога). Множество руководств по C #, посвященных строкам, могут научить вас всем мельчайшим деталям создания / компоновки строк…

2. можете ли вы разработать это? я знаю конкатенацию строк. но все еще не понимает, что вы пытаетесь сказать

Ответ №1:

Если вы хотите что-то простое и не хотите сохранять состояние о том, сколько у вас изображений, вы можете перебирать имена файлов, пока не найдете уникальное.

 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 = @$"....ResourcesImage{i}.png";

                if (!File.Exists(fileName))
                {
                    bitmap.Save(fileName, ImageFormat.Png);
                    break;
                }
            }
        }
    }
    Close();
}

  

Комментарии:

1. Я тоже так думал, но не знаю, как это сконструировать. Большое спасибо

Ответ №2:

вы можете изменить свой метод на что-то вроде этого

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

таким образом, к имени изображения добавляются текущие дата и время, и вы всегда можете быть уверены, что оно уникально, но, конечно, есть много других способов сделать это. надеюсь, это поможет

Комментарии:

1. Ценю ваш ответ. Спасибо