Чтобы очистить загруженные изображения в picturebox-c#
Первоначально я буду загружать изображения (скажем, 20 изображений) в окно изображения из указанной папки путем выбора из раскрывающегося списка со списком, они обычно загружаются в окно изображения.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я выбираю следующую папку для получения изображения для обработки, изображения ранее выбранных папок также отображаются в окне изображений после его подсчета отображаются только изображения следующих папок, я не могу очистить ранее загруженные изображения .
Чтобы быть конкретным, когда я нажимаю на папку из раскрывающегося списка, я хочу, чтобы изображение конкретной папки было внутри изображения. Я не хочу, чтобы ранее загруженные изображения были вместе с ними. Работаю в VS2013 с С#.
Как очистить picturebox c
PictureBox предназначен для показа изображений. Он позволяет отобразить файлы в формате bmp, jpg, gif, а также метафайлы ищображений и иконки. Для установки изображения в PictureBox можно использовать ряд свойств:
Image : устанавливает объект типа Image
ImageLocation : устанавливает путь к изображению на диске или в интернете
InitialImage : некоторое начальное изображение, которое будет отображаться во время загрузки главного изображения, которое хранится в свойстве Image
ErrorImage : изображение, которое отображается, если основное изображение не удалось загрузить в PictureBox
Чтобы установить изображение в Visual Studio, надо в панели Свойств PictureBox выбрать свойство Image. В этом случае нам откроется окно импорта изображения в проект, где мы собственно и сможем выбрать нужное изображение на компьютере и установить его для PictureBox:

И затем мы сможем увидеть данное изображение в PictureBox:

Либо можно загрузить изображение в коде:
Размер изображения
Для установки изображения в PictureBox используется свойство SizeMode , которое принимает следующие значения:
Normal : изображение позиционируется в левом верхнем углу PictureBox, и размер изображения не изменяется. Если PictureBox больше размеров изображения, то по справа и снизу появляются пустоты, если меньше — то изображение обрезается
StretchImage : изображение растягивается или сжимается таким обраом, чобы вместиться по всей ширине и высоте элемента PictureBox
AutoSize : элемент PictureBox автоматически растягивается, подстраиваясь под размеры изображения
CenterImage : если PictureBox меньше изображения, то изображение обрезается по краям и выводится только его центральная часть. Если же PictureBox больше изображения, то оно позиционируется по центру.
Zoom : изоражение подстраивается под размеры PictureBox, сохраняя при этом пропорции
Windows Forms — графическая коробка. Как удалить изображение
Я работаю в приложении, где есть Conbobox и Picturebox. Пользователь выбирает путь, и conbobox загружает пути к 2000 изображениям и отображает первое. Когда пользователь меняет индекс conbobox, отображаемое изображение изменяется, но я не знаю, как удалить изображение в картинке.
Если я просто перезаписываю изображение, оно не выполняет свою работу, так как при многократном повторении программа вылетает из-за памяти. Как мне удалить изображение внутри картинки?
РЕДАКТИРОВАТЬ:
Я сделал несколько изменений и не могу воспроизвести ошибку снова … так что, возможно, это было что-то еще. но только для проверки, этот код утечки памяти?
Подсказки: config — это синглтон, содержащий некоторую информацию, в данном случае, где находятся изображения.
Решение
Вы должны избавиться от старый образ. Если вы забудете это сделать, то, скорее всего, вашей программе не хватит неуправляемой памяти, когда сборщик мусора будет запускаться недостаточно часто. Растровые объекты довольно малы, вы можете выделить тысячи из них, даже не запуская GC, но они могут потреблять много неуправляемой памяти для пиксельных данных. Вы располагаете объекты в C ++ / CLI с помощью удалять оператор, он вызывает IDisposable :: Dispose ().
Обратите внимание, что FileStream, который вы используете, также является одноразовым объектом. Для этого необходимо, чтобы поток оставался открытым во время использования растрового изображения, а затем закрывался. Вы правильно не распорядились потоком, но забыли закрыть его. Слишком сложно разобраться, гораздо проще использовать конструктор Bitmap, который принимает строку для пути к файлу, поэтому класс Bitmap управляет самим основным потоком. Fix:
Другие решения
Это не работает, потому что вы пытаетесь вызвать деструктор класса, а не экземпляра. Кроме того, вам не нужно называть это как System::Drawing::Bitmap находится под контролем сборщика мусора, поэтому финализатор (! Bitmap ()) будет вызываться автоматически, если на него больше нет ссылок.
Что вы можете сделать, если вы хотите закрыть его в картинке
Кстати. Ваш код не чистый C ++, но C ++ / Cli, поэтому я добавил тег
Сначала установите нулевой указатель на свойство Image и обновите pictureBox, как показано ниже,
Удалить изображение из PictureBox в C#
Как удалить изображение из окна изображения, когда пользователь нажимает клавишу» del». Я не нахожу никаких нажатий клавиш или событий keydown для PB.
4 ответов
измените свой imgSelected на что-то вроде:
на вашем picturebox нажмите установить эту переменную отправителю:
затем на keydown формы или элемента управления, который имеет фокус вы запускаете код удаления изображения (Пример для формы):
вот так PictureBox control никогда не может получить фокус, а не сфокусированные элементы управления не получают события ввода с клавиатуры.
как документация показывает KeyDown событие (и другие события, связанные с вводом с клавиатуры) отмечены [BrowsableAttribute(false)] потому что они работают не так, как ожидалось. Они не предназначены для подписки на ваш код.
Это похоже на Label control-вы можете посмотреть на него, но он не выбирается и не могу сосредоточиться.
вам нужно будет найти другой способ для пользователя указать, что он хочет удалить изображение, отображаемое в настоящее время в PictureBox управление.
У меня была аналогичная проблема в одном из моих проектов. Я решил это, добавив внеэкранное текстовое поле. Я фокусирую текстовое поле, когда некоторые элементы управления нажимаются, и использую текстовое поле для обработки ввода с клавиатуры.
другой способ для этого может быть: Если вы рисуете на PictureBox и вы хотите, чтобы очистить его: