Mahesh Pattnayak Ответов: 1

При преобразовании байтового массива в изображение-ошибка, приходящая как " параметр недопустим"


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

после захвата он будет сохранен в папке.

но в этой строке: ошибка приходит как: (параметр недопустим.)

Dim Captured_image As System.Drawing.Image = System.Drawing.Image.FromStream(ms, False, True)


пожалуйста помочь

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

Using ms As New MemoryStream(bytes)
         ms.Write(bytes, 0, bytes.Length)
         Dim Captured_image As System.Drawing.Image = System.Drawing.Image.FromStream(ms, False, True)

         Dim SaveTo As String = Convert.ToString(path) & Session("image_name") + ".png"
         Captured_image.Save(SaveTo, Captured_image.RawFormat)


         Session("image_url") = Convert.ToString("~/Captures/") & Session("image_name") + ".png"

     End Using

F-ES Sitecore

Ваш asp.net код работает на сервере, он не может взаимодействовать с оборудованием на клиенте.

Mahesh Pattnayak

НЕТ, СЭР, ОН РАБОТАЕТ В VISUAL STUDIO ВО ВРЕМЯ ОТЛАДКИ. Но на сервере приходит ошибка AS-Parameter is not valid.

F-ES Sitecore

Он работает в Visual Studio, потому что asp.net код работает на той же машине, что и браузер, поэтому имеет доступ к оборудованию, поскольку клиент и сервер-это одна и та же машина. Когда клиент и сервер являются разными машинами, ваш код перестает работать. Он пытается получить доступ к камере, подключенной к серверу, но ее нет.

Mahesh Pattnayak

после загрузки страниц на сервер, когда я открыл страницу, она открыла веб-камеру. но когда я нажимаю на кнопку Сделать снимок, ошибка отображается следующим образом: параметр недопустим.

1 Ответов

Рейтинг:
0

Jochen Arndt

Вы используете MemoryStream(Bytes[]) конструктор. Это создаст поток из переданного массива. После этого вы снова записываете тот же массив в поток. Таким образом, ваш поток содержит изображение два раза и System.Drawing.Image.FromStream() не удается, потому что он поддерживает только потоки, содержащие одно изображение.

Вы должны опустить вызов записи

Using ms As New MemoryStream(bytes)
    'ms.Write(bytes, 0, bytes.Length)
или используйте конструктор без аргументов
Using ms As New MemoryStream()
    ms.Write(bytes, 0, bytes.Length)


Mahesh Pattnayak

сэр, я прокомментировал эту фразу .. но та же ошибка возникает и в этой строке :

Dim Captured_image Как Система.Рисование.система визуализации.Рисование.Изображение.FromStream(ms, False, True)

Jochen Arndt

Тогда ваши данные, вероятно, не являются действительным изображением.

Mahesh Pattnayak

на самом деле он отлично работает в Visual studio IDE..но на сервере он приходит ошибка.

Jochen Arndt

Тогда все, что я могу предложить, - это записать данные в файл и проверить его.

В чем разница относительно данных? Как вы получаете их с веб-камеры? Вы проверяете наличие ошибок?

Самой простой проверкой было бы просто проверить, есть ли байты.Длина не равна нулю.

Mahesh Pattnayak

байты.длина прибывает как-1351760

Mahesh Pattnayak

Данные base64 - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAAPAcayaaabq3nr5aaagaeleqvr4xuy96ylknpksg7vpv89okw3d5/2f8UzXcmD2mQFOZlbfub+VUUpFBIMEHL67AQRfPR6Pz+vv5fXCgRcO3Dnweh14tf703s9v1sc3bx6fl9v8/vhp/b4OfF7vH9bfx5yva/q3Du/j61Rbm461XR3TS8enJa7fX6tPna529bd+f/WW459WG5..."

я удаляю строку - (data:image/png;base64,) из строки base64, а затем преобразую ее в байтовый массив.

Jochen Arndt

Как вы конвертируете (используете ли вы декодер base64)?

Mahesh Pattnayak

Dim bytes As Byte () = Convert.FromBase64String(convert1)

здесь convert1-это переменная, содержащая строку base64.

Jochen Arndt

Выглядит нормально.
Но в чем разница между IDE и сервером?
Вы можете попытаться записать байты (или поток памяти) в файл и прочитать его как изображение. Или даже используйте расширение. png и попробуйте загрузить файл с помощью любого средства просмотра изображений.

Mahesh Pattnayak

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

Jochen Arndt

К сожалению, нет.

Все вопросы здесь надо пытаться решать публично.

И это не поможет, потому что у меня нет ни вашей веб-камеры, ни сервера.

Mahesh Pattnayak

хорошо, сэр, тогда что же делать ? пожалуйста, предложите .

Jochen Arndt

Как уже было сказано:
Запишите данные в файл и проверьте его (загрузив из кода или с помощью средства просмотра изображений при использовании расширения .png).

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