Member 14423031 Ответов: 1

Как изменить размер изображения и перезаписать сохранение ?


Я хочу изменить размер изображения из окна изображения, а затем сохранить его в формате JPG по тому же пути к файлу. Я использовал следующий код и получил ошибку "общая ошибка произошла в GDI+.

текстовое поле textbox1.текст=путь к образу

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

dim imgwidth as integer
dim imgheight as integer
dim factor as double=0.6

imgwidth=picturebox1.image.width
imgheight=picturebox1.image.height

dim saveimage as new bitmap(picturebox1.image,imgwidth*factor,imageheight*factor)

saveimage.save(textbox1.text,imaging.imageformat.jpeg)
saveimage.dispose()

MadMyche

Как это имя picturebox1 заполняется; вы пытаетесь перезаписать исходный файл?
При отладке это происходит правильно, когда вы получаете "сохранить"?
Возможно, вы захотите завернуть это в Try...Catch блокировать и точно выяснить, какой тип исключения выбрасывается?

Member 14587959

да я хочу сохранить исходный файл

Member 14587959

Необработанное исключение типа 'System.Runtime.InteropServices.ExternalException' произошло в системе.Drawing.dll

Дополнительная информация: в GDI+произошла общая ошибка.

MadMyche

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

Member 14587959

я попробовал ваше решение 1 и все еще получаю ту же ошибку

моя идея программы

я хочу уменьшить размер изображения, а затем сохранить его в пути к файлу (перезапись)



если у вас есть какие-то другие идеи, пожалуйста, помогите мне

Member 14587959

Dim imgwidth как целое число
Dim imgheight как целое число
Тусклый коэффициент как двойной = 0,6
Тусклая картинка = изображение.FromFile(Текстовое Поле Textbox1.Текст)

imgwidth = картинка.Ширина
imgheight = картинка.Высота

Дим SaveImage как новое растровое изображение(картинку, imgwidth * фактор, imgheight * коэффициент)



SaveImage.Сохранить(TextBox1.Text, System.Рисование.Изображений.ImageFormat.Jpeg)
SaveImage.Располагать()

MadMyche

Я не вижу причин для этого. using блок от решения 1 там.

1 Ответов

Рейтинг:
1

OriginalGriff

Если это то же имя файла, которое вы пишете, что и первоначально прочитанное, то проблема, вероятно, связана с кодом, который вы использовали для загрузки изображения в первую очередь.
Если вы сделаете это:

Image i = Image.FromFile(path);
Что файл заблокирован до тех пор, пока ваш образ не умрет. В документации об этом все ясно: Изображение.Метод FromFile (System.Чертеж) | Microsoft Docs[^]
Цитата:
Замечания
...

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

Поэтому вам нужно изменить способ загрузки изображения:
using (Image image = Image.FromFile(path))
   {
   pictureBox1.Image - new Bitmap(image);
   }