Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите переделать метод / 21 сообщений из 21, страница 1 из 1
17.12.2012, 22:55
    #38082666
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Здравствуйте.
Мне нужно переделать данный метод.
Раньше я возвращала Image, а теперь мне надо вернуть картинку как массив байтов, чтобы потом прочитать в другом месте.

метод 1
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  private void Photo(int user)
        {
            Image currentPhoto;
            using (System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(connstr))
            {
                con.Open();
                String zapros = "запрос '" + user + "'";
                SqlCommand com = con.CreateCommand();
                com.CommandText = zapros;
                com.Connection = con;
                SqlDataAdapter adapt = new SqlDataAdapter();
                adapt.SelectCommand = com;
                byte[] pictureData = (byte[])com.ExecuteScalar();//картинку вытаскиваю из поля БД Image, которую нужно записать в массив
                    using (MemoryStream stream = new System.IO.MemoryStream(pictureData))
                    {
                         currentPhoto = Image.FromStream(stream);
                    }
              }
        }



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

метод 2

Код: c#
1.
2.
3.
4.
5.
6.
7.
// вернуть массив байтов
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
 MemoryStream ms = new MemoryStream();
 imageIn.Save(ms,System.Drawing.Imaging.ImageFormat.Gif);
 return  ms.ToArray();
}
...
Рейтинг: 0 / 0
17.12.2012, 23:05
    #38082679
beg-in-er
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
XXL,

случаем не так? зачем запихивать байты в картинку, что бы потом из неё вернуть байты
Код: c#
1.
 return pictureData;
...
Рейтинг: 0 / 0
18.12.2012, 07:12
    #38082891
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
преобразования из Image в Byte[] можно делать с помощью memorystream и в ту и в другую сторону, а в базу данных помещать с помощью Chunk
...
Рейтинг: 0 / 0
18.12.2012, 07:19
    #38082892
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Из массива в картику:

Byte[] arr;
MemoryStream tmpstrm = new MemoryStream(arr);
Image img = new Bitmap(Image.FromStream(tmpstrm)); }
...
Рейтинг: 0 / 0
18.12.2012, 07:43
    #38082897
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Roman Mejtes, кэп, ты код ТС смотрел?
...
Рейтинг: 0 / 0
18.12.2012, 07:47
    #38082898
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
skyANA,

если она выгружает картинку из базы, зачем вообще её преобразовывать там поле и так идёт в виде байтового массива? зачем ей преобразовывать из картинки в массив, если в базе данных картинки и так байтовый массив. я не понимаю.
...
Рейтинг: 0 / 0
18.12.2012, 07:48
    #38082900
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Roman Mejtes,

Раньше я возвращала Image, а теперь мне надо вернуть картинку как массив байтов, чтобы потом прочитать в другом месте.

byte[] pictureData = (byte[])com.ExecuteScalar();//картинку вытаскиваю из поля БД Image, которую нужно записать в массив

у неё в коде ответ на её вопрос, я может что то не понимаю?
...
Рейтинг: 0 / 0
18.12.2012, 08:54
    #38082941
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Здравствуйте.
Всем спасибо за ответы.
Я просто с картинками столкнулась впервые.
Если из бД поле и так идёт в виде байтового массива, то конечно не нужно преобразовывать.
...
Рейтинг: 0 / 0
18.12.2012, 09:05
    #38082950
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
В этом случае так и будет byte[] pictureData = (byte[])com.ExecuteScalar();
...
Рейтинг: 0 / 0
18.12.2012, 09:32
    #38082980
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Только картинку как массив байтов мне нужно вернуть в веб-сервисе, а читать в клиентском приложении.
Чтобы прочитать массив байтов в клиентском приложении, мне нужно при получении массива байтов в веб-сервисе создавать MemoryStream?
...
Рейтинг: 0 / 0
18.12.2012, 09:36
    #38082985
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
XXL,

массив по сути это просто бинарное представление этой картинки, вы можете поместить этот массив в любой поток
в FileSteam И сохранить на диск, получится картинка (расширение надо указать то, в каком формате вы считали картинку)
то есть в вашем клиентском приложении вам надо будет поместить массив в стрим new MemoryStream(array), а затем загрузить с помощью метода FromStream

кстати если картинки 16x16 или маленькие, есть вариант Base64
...
Рейтинг: 0 / 0
18.12.2012, 09:50
    #38083005
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Roman MejtesXXL,

массив по сути это просто бинарное представление этой картинки, вы можете поместить этот массив в любой поток
в FileSteam И сохранить на диск, получится картинка (расширение надо указать то, в каком формате вы считали картинку)
то есть в вашем клиентском приложении вам надо будет поместить массив в стрим new MemoryStream(array), а затем загрузить с помощью метода FromStream

кстати если картинки 16x16 или маленькие, есть вариант Base64

Т.е. в MemoryStream мне нужно массив помещать только в клиентском приложении?
А при записи в веб-сервисе он остается в памяти сервера?
...
Рейтинг: 0 / 0
18.12.2012, 09:53
    #38083009
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
держите картинку всегда в виде массива (в базе, в памяти сервера, в памяти клиента), когда надо её отобразить, тогда и преобразовывайте в Image.
...
Рейтинг: 0 / 0
18.12.2012, 10:08
    #38083020
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Roman Mejtesдержите картинку всегда в виде массива (в базе, в памяти сервера, в памяти клиента), когда надо её отобразить, тогда и преобразовывайте в Image.

Допустим в веб-сервисе я записала картинку в массив. Он где останется - в памяти сервера или клиента, который к нему обратится?
...
Рейтинг: 0 / 0
18.12.2012, 10:11
    #38083024
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
XXL, Вам необходимо реализовать метод сервиса, что по требованию клиента будет отдавать последнему картинку в виде массива байт.
Клиент получит этот массив и дальше может хранить, не хранить, как Вам угодно.
Веб-сервис после обработки запроса ничего хранить не будет, зачем это ему?
...
Рейтинг: 0 / 0
18.12.2012, 10:14
    #38083028
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Спасибо. Все ясно.
...
Рейтинг: 0 / 0
21.12.2012, 22:21
    #38088821
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Продолжу эту тему, т.к. новый вопрос является ее продолжением.

1. веб-сервис вернул мне картинку в виде массива байтов.
При тестировании я вижу такую структуру: <base 64 Binary>...много символов.. </base 64Binary>

2. В клиентском приложении подключила веб-ссылку на сервис, передала параметр, но не знаю как теперь прочитать ответ веб-сервера (массив байтов) в клиентском приложении.

Вот как у меня сейчас сделано:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Private Sub GETPhoto()
        '' обращаемся к вебсервису за фоткой
        'Try
        Dim Service As New localhost.Service()
        Service.Photo(userskud) передаю параметр юзера

Вот здесь мне нужно получить ответ от сервиса

        byteArrayToImage()
        pb_Manfromuniv_foto.Image = PhotoImage
        Catch ex As Exception
        pb_Manfromuniv_foto.Image = cv.My.Resources.nophoto 
        Return
        End Try
    End Sub

Public Function byteArrayToImage() As Image
        '' Получаем фото из массива битов
        Dim ms As New MemoryStream(byteArrayIn)
        PhotoImage = Image.FromStream(ms)
        Return PhotoImage
    End Function



Заранее благодарю:)
...
Рейтинг: 0 / 0
22.12.2012, 00:19
    #38088881
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
XXL,

посмотри что возвращает функция Service.Photo()
...
Рейтинг: 0 / 0
22.12.2012, 10:33
    #38088989
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
bazileXXL,

посмотри что возвращает функция Service.Photo()
В новом варианте эта функция возвращает массив байтов, она работает.
При тестировании через браузер я вижу такую структуру: <base 64 Binary>...много символов.. </base 64Binary>
Вопрос в том, как прочитать ответ от веб-сервиса в клиенте. У меня это первый веб-сервис.
...
Рейтинг: 0 / 0
22.12.2012, 11:20
    #38088999
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
XXL,

если функция возвращает массив байтов, то и пользуйся им:
Код: vbnet
1.
2.
Dim bytesPhoto() As Byte = Service.Photo(userskud)
pb_Manfromuniv_foto.Image = PhotoImage(bytesPhoto)
...
Рейтинг: 0 / 0
22.12.2012, 11:26
    #38089005
XXL
XXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите переделать метод
Спасибо
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Помогите переделать метод / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]