Member 12907855 Ответов: 1

Как сохранить изображения с уникальными именами с помощью цикла?


У меня есть 3 кнопки..
1) откройте изображение 2)Сохраните изображение 3) сохраните шаблон..

Если у меня есть папка из 100 изображений,то при нажатии на кнопку "Открыть изображение" мне нужно запустить цикл,чтобы каждое изображение вместе с его шаблоном автоматически сохранялось в разных папках...

Код:
public partial class EnrollFromImage : UserControl
{
    public EnrollFromImage()
    {
        InitializeComponent();

        openFileDialog.Filter = NImages.GetOpenFileFilterString(true, true);
        saveFileDialog.Filter = NImages.GetSaveFileFilterString();
    }

    private NImage _image;
    private NBiometricClient _biometricClient;
    private NSubject _subject;
    private NFinger _subjectFinger;

    private byte _defaultThreshold;

    public NBiometricClient BiometricClient
    {
        get { return _biometricClient; }
        set 
        {
            _biometricClient = value;
            _defaultThreshold = _biometricClient.FingersQualityThreshold;
            thresholdNumericUpDown.Value = _defaultThreshold;
        }
    }

    private void OnExtractionCompleted(IAsyncResult r)
    {
        if (InvokeRequired)
        {
            BeginInvoke(new AsyncCallback(OnExtractionCompleted), r);
        }
        else
        {
            NBiometricStatus status = NBiometricStatus.None;
            try
            {
                status = _biometricClient.EndCreateTemplate(r);
                if (status != NBiometricStatus.Ok)
                {
                    MessageBox.Show(string.Format(@"Extraction failed. Status: {0}", status), Text, MessageBoxButtons.OK);
                }
            }
            catch (Exception ex)
            {
                Utils.ShowException(ex);
            }
            finally
            {
                if (status == NBiometricStatus.Ok)
                {
                    lblQuality.Text = string.Format("Quality: {0}", _subjectFinger.Objects.First().Quality);
                    saveImageButton.Enabled = true;
                    saveTemplateButton.Enabled = true;
                    chbShowBinarizedImage.Enabled = true;
                }
                else
                {
                    lblQuality.Text = string.Empty;
                    fingerView2.Finger = null;
                    _subject = null;
                    _subjectFinger = null;
                }
            }
        }
    }

    private void ExtractFeatures()
    {
        if (_image == null) return;
        saveImageButton.Enabled = false;
        saveTemplateButton.Enabled = false;
        chbShowBinarizedImage.Enabled = false;

        // Create a finger subject and begin extracting
        _subjectFinger = new NFinger { Image = _image };
        _subject = new NSubject();
        _subject.Fingers.Add(_subjectFinger);
        fingerView2.Finger = _subjectFinger;

        _biometricClient.BeginCreateTemplate(_subject, OnExtractionCompleted, null);
    }

    private void OpenButtonClick(object sender, EventArgs e)
    {
        openFileDialog.Filter = "Images (*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";
        openFileDialog.Multiselect = true;
        openFileDialog.FileName = null;
        if (openFileDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                if (_image != null)
                {
                    _image.Dispose();
                    _image = null;
                }
                lblQuality.Text = string.Empty;
                fingerView1.Finger = null;
                fingerView2.Finger = null;

                extractFeaturesButton.Enabled = false;
                saveImageButton.Enabled = false;
                saveTemplateButton.Enabled = false;

                _image = NImage.FromFile(openFileDialog.FileName);
                var finger = new NFinger { Image = _image };
                fingerView1.Finger = finger;
                extractFeaturesButton.Enabled = true;
                ExtractFeatures();
            }
            catch (Exception ex)
            {
                Utils.ShowException(ex);
            }
        }
    }

    private void ExtractFeaturesButtonClick(object sender, EventArgs e)
    {
        ExtractFeatures();
    }

    private void DefaultButtonClick(object sender, EventArgs e)
    {
        thresholdNumericUpDown.Value = _defaultThreshold;
    }

    private void SaveImageButtonClick(object sender, EventArgs e)
    {
        if (_subjectFinger != null)
        {
            saveFileDialog.InitialDirectory = "C:/Users/admin/Desktop/Save_Images";

            saveFileDialog.FileName = string.Empty;
            saveFileDialog.Filter = NImages.GetSaveFileFilterString();
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if (chbShowBinarizedImage.Checked)
                    {
                        _subjectFinger.BinarizedImage.Save(saveFileDialog.FileName);
                    }
                    else
                    {
                        _subjectFinger.Image.Save(saveFileDialog.FileName);
                    }
                }
                catch (Exception ex)
                {
                    Utils.ShowException(ex);
                }
            }
        }
    }

    private void ThresholdNumericUpDownValueChanged(object sender, EventArgs e)
    {
        if (_biometricClient != null)
        {
            _biometricClient.FingersQualityThreshold = (byte)thresholdNumericUpDown.Value;
            defaultButton.Enabled = true;
        }
    }

    private void SaveTemplateButtonClick(object sender, EventArgs e)
    {
        if (_subject != null)
        {
                
            saveFileDialog.InitialDirectory = "C:/Users/admin/Desktop/Savedtemp_Datfiles";
            saveFileDialog.FileName = string.Empty;
            saveFileDialog.Filter = "Data Files (*.dat)|*.dat";
            saveFileDialog.DefaultExt= "dat";
            saveFileDialog.AddExtension = true;
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    File.WriteAllBytes(saveFileDialog.FileName, _subject.GetTemplateBuffer().ToArray());
                }
                catch (Exception ex)
                {
                    Utils.ShowException(ex);
                }
            }
        }
    }

    private void EnrollFromImageVisibleChanged(object sender, EventArgs e)
    {
        if (Visible && _biometricClient != null)
        {
            thresholdNumericUpDown.Value = _defaultThreshold;
            thresholdNumericUpDown.Enabled = true;
            defaultButton.Enabled = true;
            _biometricClient.FingersReturnBinarizedImage = true;
        }
    }

    private void ChbShowBinarizedImageCheckedChanged(object sender, EventArgs e)
    {
        fingerView2.ShownImage = chbShowBinarizedImage.Checked ? ShownImage.Result : ShownImage.Original;
    }

    private void FingerView2MouseClick(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right && chbShowBinarizedImage.Enabled)
        {
            chbShowBinarizedImage.Checked = !chbShowBinarizedImage.Checked;
        }
    }

}


Что я уже пробовал:

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

Richard MacCutchan

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

ZurdoDev

Что ты имеешь в виду? Вы не хотите, чтобы они нажали кнопку? Я не понимаю вашего вопроса.

OriginalGriff

Это не очень хороший вопрос - мы не можем понять из этого малого, что вы пытаетесь сделать.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли.
Почему кнопка "Открыть изображение" должна что-то сохранять? Разве это не работа кнопки "Сохранить Изображение"?
И в чем проблема? Где ты застрял? Какая помощь вам нужна?
Используйте виджет" улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

1 Ответов

Рейтинг:
0

#realJSOP

Просто создайте папку с именем файла и сохраните файл в этой папке. Что-то вроде этого:

/ <summary>
/// Create the folder
/// </summary>
/// <param name="rootPath">The rpath where you want to create the new folder</param>
/// <param name="fileName">the current file name</param>
/// <returns>the newly created folder path</returns>
private string CreateFolder(string rootPath, string fileName)
{
    string folderName = string.Concat(System.IO.Path.GetFileNameWithoutExtension(fileName), "_", System.IO.Path.GetExtension(fileName).Replace(".", ""));
    int tries = 1;
    while (Directory.Exists(folderName))
    {
        folderName = System.IO.Path.Combine(rootPath, string.Format("{0}({1:00}",folderName, tries);
    }
    Directory.CreateDirectory(folderName);
    return folderName;
}

/// <summary>
/// Create the folder
/// </summary>
/// <param name="rootPath">The rpath where you want to create the new folder</param>
/// <param name="fileName">the current file name</param>
private void SaveFile(string path, string fileName, Stream data)
{
    string folder = CreateFolder(path, fileName);
    string justFileName = System.IO.Path.GetFileName(fileName);
    string newFileName = System.IO.Path.Combine(folder, justFileName);
        
    using (var fileStream = new FileStream(newFileName, FileMode.Create, FileAccess.Write))
    {
        data.CopyTo(fileStream);
    }
}