#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. Ценю ваш ответ. Спасибо