#c# #winforms #bitmap
#c# #winforms #растровое изображение
Вопрос:
У меня проблема с использованием этой части кода.
Я получаю 2 разных исключения:
1 — (изображение) — параметр недействителен
2 — в этой строке: Application.Run(new Form1());
— параметр недействителен
Я собираюсь:
- Создание растрового изображения из файла
- Установите изображение моего PictureBox на это растровое изображение
.Dispose()
растрового изображения (я хочу удалить этот файл позже)
Image image;
private void buttonWyswietl_Click(object sender, EventArgs e)
{
if (File.Exists(@"image.jpg"))
{
using (Bitmap ExampleImgBitmap = new Bitmap(@"image.jpg"))
{
int x, y;
// Loop through the images pixels to reset color.
for (x = 0; x < ExampleImgBitmap.Width; x )
{
for (y = 0; y < ExampleImgBitmap.Height; y )
{
Color pixelColor = ExampleImgBitmap.GetPixel(x, y);
Color newColor = Color.FromArgb(pixelColor.A, pixelColor.R, pixelColor.G, pixelColor.B);
ExampleImgBitmap.SetPixel(x, y, newColor);
}
}
// Set the PictureBox to display the image.
image = ExampleImgBitmap;
}
pictureBox1.Image = image;
}
}
private void buttonUsun_Click(object sender, EventArgs e)
{
if (File.Exists("image.jpg")) {
File.Delete("image.jpg");
}
}
PS: я использую растровое изображение для использования gif-файла
Комментарии:
1. Вам нужно быть немного более конкретным в том, в чем заключается ваша проблема. Вы получаете какие-либо ошибки? Приводит ли это к непреднамеренным результатам? Пожалуйста, уточните.
2.
using (var bitmap = (Bitmap)Image.FromStream(new MemoryStream(File.ReadAllBytes(@"image.jpg")))) { ... pictureBox1.Image?.Dispose(); pictureBox1.Image = bitmap; }
— Укажите полный путь к изображению. Нет необходимости проверятьFile.Exists()
, посколькуFile.Delete()
не выдает, когда файла там нет. Он выдает ошибку, если каталог не найден. Одна из причин, по которой вы всегда указываете полный путь. — Я предполагаюSetPixel()
, что это пример: вы сейчас ничего не делаете.3. Если у вас есть исключение и в Program.cs (
Application.Run()
) , оно, вероятно, отскочило от конструктора формы (который вы здесь не показываете).4. Вы не можете удалить все, что еще нужно, и свойство изображения Pbox именно таково: необходимо, пока вы не установите для него значение null или другое изображение.
5. Пример растрового изображения: gb bitmap; MemoryStream ms = new MemoryStream(); частная пустая кнопкаWyswietl_Click(отправитель объекта, EventArgs e) { pictureBox1.Image?. Dispose(); если (File. Существует (@»image.jpg «)) { using (FileStream fs = new FileStream(@»image.jpg «, Режим файла.Открыть)) { fs.CopyTo(ms); } ExampleImgBitmap = новое растровое изображение (ms, true); pictureBox1.Image = ExampleImgBitmap; } }
Ответ №1:
A System.Windows.Forms.PictureBox
не может отображать удаленные изображения. Поэтому не удаляйте изображение, пока не будете уверены, что вам больше не нужно его отображать.
И еще один совет: чтобы улучшить возможность повторного использования вашего кода, не делайте слишком много за одну процедуру.
Примечание: пока изображение из файла не удалено, файл используется
private void buttonWyswietl_Click(object sender, EventArgs e)
{
this.ShowImage(@"image.jpg");
}
private void ShowImage(string imageFilename)
{
if (File.Exists(imageFileName))
{
Bitmap image = new Bitmap(@"image.jpg");
this.pictureBox1.Image = this.ChangeImage(image);
}
// else: TODO: what if image doesn't exist?
}
Bitmap ChangeImage(Bitmap originalImage)
{
// Loop through the images pixels to reset color.
for (int x = 0; x < originalImage.Width; x)
{
for (int y = 0; y < exampleImgBitmap.Height; y)
{
...
}
}
return originalImage;
}
Теперь, если вы хотите внести небольшие изменения, например, сделать что-то подобное при нажатии на пункт меню или изменении имени файла в текстовом поле, вы можете повторно использовать изображения.
Или, если вы не хотите показывать исходное изображение, но показываете копию, требуется только небольшое изменение.
Перед удалением убедитесь, что изображение не отображается. Перед удалением файла убедитесь, что изображение удалено.