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

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

растровое изображение bm = новое растровое изображение ("images / cat.jpg");

Я пробовал использовать различные изображения всех размеров, чтобы попробовать и проверить, является ли это проблемой размера файла, однако оказалось, что только 1 существующее изображение в проекте может работать (это изображение кошки).

Все остальные изображения возвращают ошибку «Параметр недействителен». Я пытаюсь перестроить проект и разрешить чтение, но все еще не могу заставить его работать.

System.ArgumentException was unhandled
  HResult=-2147024809
  Message=Parameter is not valid.
  Source=System.Drawing
  StackTrace:
       at System.Drawing.Bitmap..ctor(String filename)
       at Image_Authentication_Final.RegistrationForm.btnRegister_Click(Object sender, EventArgs e) in c:\Users\Acc\Desktop\Image Authentication Final\Image Authentication Final\RegistrationForm.cs:line 176
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at MetroFramework.Controls.MetroButton.OnMouseUp(MouseEventArgs e)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at Image_Authentication_Final.Program.Main() in c:\Users\Acc\Desktop\Image Authentication Final\Image Authentication Final\Program.cs:line 19
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

person Alan    schedule 30.12.2014    source источник
comment
@dbc Только попробовал, совсем не работает ...   -  person Alan    schedule 30.12.2014
comment
Просто попробовал использовать то же изображение, скопировав его и переименовав вторую копию в cat2.jpg .. и если я поместил это изображение в растровое изображение, он вернет мне ошибку, что за ?!   -  person Alan    schedule 30.12.2014
comment
Это Bitmap bmp = new Bitmap("images/cat.jpg"); все, что вы делаете для создания растрового изображения, или вы используете другие параметры, которые не отображали?   -  person t3chb0t    schedule 30.12.2014
comment
Возможно ли, что вы загрузите одно из изображений, которые не работают в zip-архиве, в sendpace или что-то в этом роде?   -  person t3chb0t    schedule 30.12.2014
comment
@ t3chb0t в основном строки после этого выполняют скрытие данных с помощью стеганографии. Это первая строка, когда пользователь нажимает кнопку.   -  person Alan    schedule 30.12.2014
comment
@ t3chb0t, я загружу его на imgur, но сейчас я на улице, как только вернусь домой, я отправлю bsck в эту ветку ..   -  person Alan    schedule 30.12.2014
comment
Было бы лучше, если бы вы загрузили его в виде zip-архива, потому что я думаю, что он может быть изменен на страницах хостинга изображений.   -  person t3chb0t    schedule 30.12.2014
comment
@ t3chb0t, конечно, выложу через час или около того. Спасибо еще раз! :)   -  person Alan    schedule 30.12.2014
comment
Изображение, вызывающее исключение, является ли это исходным изображением или после того, как вы изменили его с помощью алгоритма стеганографии, потому что в этом случае ваш алгоритм может быть нарушен и повредить изображение. Можете ли вы вообще открыть его в любой программе просмотра изображений?   -  person t3chb0t    schedule 30.12.2014
comment
@ t3chb0t - это чистые изображения, которые я скачал из сети. Сначала я обнаружил, что это может быть из-за размера изображения (как упоминалось в другом потоке), однако я понял, что найти меньшее изображение тоже не сработало. Меня больше интересует, почему изображение кошки размером 1,5 МБ работает, а не изображения меньшего размера, лол.   -  person Alan    schedule 30.12.2014


Ответы (2)


  • Попробуйте указать полный путь к файлу изображения с двойной обратной косой чертой ("C: \ test \ abc.jpg")
  • Determine if the jpeg file is valid for .net's image codec
    • Create jpeg in MS Paint
    • Создавайте jpeg в GIMP, Photoshop, ...
    • Используйте imagemagick, чтобы преобразовать jpeg из jpeg в png, а затем обратно в jpeg
    • Используйте jpegtran для оптимизации jpeg, чтобы принудительно перезаписать заголовок jpeg
  • Используйте идентификатор imagemagick или gimp, чтобы определить, что находится в jpeg (это может быть другой формат файла изображения или jpeg 2000)
  • В коде .net используйте вызовы File или FileInfo, чтобы убедиться, что файл существует, имеет ненулевую длину и доступен.

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

person stak    schedule 30.12.2014
comment
Спасибо за ваш вклад, к счастью, imagemagick - это существующая библиотека в моем проекте, и я действительно попытался получить информацию об изображении (без фактического преобразования), но все равно безрезультатно. - person Alan; 30.12.2014

Забыл добавить. .NET, как известно, не умеет обрабатывать растровые изображения и изображения и требует, чтобы ресурсы изображений были освобождены или удалены. Многократное выполнение операций с изображениями без их освобождения вызовет проблемы.

Проверьте количество дескрипторов процесса в проводнике процессов.

Для серверных или даже настольных приложений для обработки изображений я записал изображение на диск, затем запустил командную строку imagemagick.exe для обработки изображения и ждал, пока будет записан выходной файл изображения. Это позволяет imagemagick запускаться, выполнять операции с изображениями и выходить в одном процессе без засорения памяти или дескрипторов .net.

person stak    schedule 17.10.2019