Сохранение рисунка в Base64

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Сохранение рисунка в Base64

Сообщение -=TsA=- » 03.07.2009 (Пт) 8:31

Вроде все правильно, но уже второй день не могу решить проблему:
Код: Выделить всё
    Private Function OpenPicture() As String
        Dim Memory As New System.IO.MemoryStream()
        Dim Base64 As String = ""
        With OpenFileDialog1
            .FileName = ""
            .Filter = "Графические файлы|*.jpg;*.png|Все файлы (*.*)|*.*"
            .ShowDialog()
        End With
        If Len(OpenFileDialog1.SafeFileName) > 0 Then
            PictureBox1.Load(OpenFileDialog1.FileName)
            PictureBox1.Image.Save(Memory, Imaging.ImageFormat.Jpeg)
            Base64 = System.Convert.ToBase64String(Memory.ToArray)
            Memory.Close()
            Memory = Nothing
        End If
        OpenPicture = Base64
    End Function

Изображение
Что здесь не так?

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сохранение рисунка в Base64

Сообщение Joo » 03.07.2009 (Пт) 10:33

Вот так:
Код: Выделить всё
    Private Function OpenPicture() As String
        With OpenFileDialog1
            .FileName = ""
            .Filter = "Графические файлы|*.jpg;*.png|Все файлы (*.*)|*.*"
            .ShowDialog()
        End With
        If IO.File.Exists(OpenFileDialog1.FileName) Then
            Return System.Convert.ToBase64String(IO.File.ReadAllBytes(OpenFileDialog1.FileName))
        Else
            Return ""
        End If
    End Function
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сохранение рисунка в Base64

Сообщение MIT » 03.07.2009 (Пт) 10:49

На самом деле в коде
Код: Выделить всё
PictureBox1.Load(OpenFileDialog1.FileName)
может быть потаенный смысл (правда тут кое-чего не хватает).
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сохранение рисунка в Base64

Сообщение Joo » 03.07.2009 (Пт) 11:04

MIT писал(а):На самом деле в коде
Код: Выделить всё
PictureBox1.Load(OpenFileDialog1.FileName)
может быть потаенный смысл (правда тут кое-чего не хватает).


Какой к черту смысл? Смысл в заголовке темы "Сохранение рисунка в Base64", загрузка в пикчер бокс к этому не имеет не какого отношения.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сохранение рисунка в Base64

Сообщение MIT » 03.07.2009 (Пт) 12:48

Во-первых: не все картинка, что джипег (не хватает обработчика ошибок)
Во-вторых: картинка зачем-то грузиться в PictureBox; предлагаешь еще раз прочитать файл для этого?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Re: Сохранение рисунка в Base64

Сообщение -=TsA=- » 03.07.2009 (Пт) 13:02

MIT писал(а):Во-первых: не все картинка, что джипег (не хватает обработчика ошибок)
Во-вторых: картинка зачем-то грузиться в PictureBox; предлагаешь еще раз прочитать файл для этого?


1. Ну это упрощенный код, в тесте гарантировано используется картинка :D
2. Картинка грузится в PictureBox, там мы ее слегка редактируем и потом сохраняем в Base64. Здесь же для устранения всех возможных наводок от внешних (не относящихся к делу) обработок, они удалены.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сохранение рисунка в Base64

Сообщение Joo » 03.07.2009 (Пт) 13:07

MIT писал(а):Во-первых: не все картинка, что джипег (не хватает обработчика ошибок)

Да ну?! А я думал это так.
Я предложил вариант получения Base64 из картинки. Ошибки пусть обрабатывает автор, я не претендовал на полный алгоритм.

MIT писал(а):Во-вторых: картинка зачем-то грузиться в PictureBox; предлагаешь еще раз прочитать файл для этого?

Давай не будем строить предположений, автор скажет если ему еще что-то нужно.
Если и нужно загрузить в пикчер бокс, то лучше её еще раз загрузить, чем делать save в память и оттуда получать бинарный массив.

Пока писал пост автор отозвался.
-=TsA=- писал(а):Картинка грузится в PictureBox, там мы ее слегка редактируем и потом сохраняем в Base64

Вот об этом нужно было сообщать сразу! Хотя бы между загрузкой картинки в пикчер бокс и её сохранение, написал в комментах.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сохранение рисунка в Base64

Сообщение MIT » 03.07.2009 (Пт) 13:07

Предлагаю использовать для этого супер технологию картина=неуправляемый массив. Тогда и редактировать просто и доступ к массиву есть (для конвертации в 64).

Пока писал пост Joo отозвался.

Joo писал(а):Да ну?! А я думал это так.
Переименую любой экзэшник в .jpg и попробуй открыть такую картинку в PictureBox.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Re: Сохранение рисунка в Base64

Сообщение -=TsA=- » 03.07.2009 (Пт) 13:11

MIT писал(а):Предлагаю использовать для этого супер технологию картина=неуправляемый массив. Тогда и редактировать просто и доступ к массиву есть (для конвертации в 64).

Это как? Код пожалуйста в студию

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сохранение рисунка в Base64

Сообщение MIT » 03.07.2009 (Пт) 13:13

Только сначала скажи: что тебе необходимо от PictureBox`а? Только отображение картинки в нем?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Re: Сохранение рисунка в Base64

Сообщение -=TsA=- » 03.07.2009 (Пт) 13:19

MIT писал(а):Только сначала скажи: что тебе необходимо от PictureBox`а? Только отображение картинки в нем?

Давай для начала ограничимся отображением

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сохранение рисунка в Base64

Сообщение MIT » 03.07.2009 (Пт) 13:25

Помниться в начале этого года я, Joo и еще несколько человек решили организовать свой форум. Однако их энтузиазм быстро закончился, а у меня просто нет возможности поддерживать форум в одиночку... Ну да ладно, не до лирики. В качестве материала для сайта я написал пару статей, одна из которых посвящена работе с памятью и изображениями, вот она: GDIp: Слои (Основа). На ее основе у меня лежит куча наработок (в т.ч. несколько игр), даже материал для форума был набран, но...
Короче говоря, надеюсь пригодиться, если что - спрашивай.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сохранение рисунка в Base64

Сообщение Joo » 03.07.2009 (Пт) 13:29

MIT писал(а):Переименую любой экзэшник в .jpg и попробуй открыть такую картинку в PictureBox.

Да я прикалываюсь. Я же сказал что обработкой ошибок пусть автор занимается.

К стати, этот код:
Код: Выделить всё
    Private Function OpenPicture() As String
        With OpenFileDialog1
            .FileName = ""
            .Filter = "Графические файлы|*.jpg;*.png|Все файлы (*.*)|*.*"
            .ShowDialog()
        End With
        If IO.File.Exists(OpenFileDialog1.FileName) Then
            PictureBox1.Image = New Bitmap(OpenFileDialog1.FileName)
            'Махинации с изображением
            Dim ms As New IO.MemoryStream
            PictureBox1.Image.Save(ms, Imaging.ImageFormat.Png)
            Return System.Convert.ToBase64String(ms.ToArray)
        Else
            Return ""
        End If
    End Function

Вполне работоспособен!

Можно конечно сделать как предлагает MIT, способ довольно хорош, но придется поработать головой.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

-=TsA=-
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 21.09.2004 (Вт) 14:32
Откуда: Татарстан, Заинск

Re: Сохранение рисунка в Base64

Сообщение -=TsA=- » 04.07.2009 (Сб) 6:32

Joo писал(а):
MIT писал(а):Переименую любой экзэшник в .jpg и попробуй открыть такую картинку в PictureBox.

Да я прикалываюсь. Я же сказал что обработкой ошибок пусть автор занимается.

К стати, этот код:
Код: Выделить всё
    Private Function OpenPicture() As String
        With OpenFileDialog1
            .FileName = ""
            .Filter = "Графические файлы|*.jpg;*.png|Все файлы (*.*)|*.*"
            .ShowDialog()
        End With
        If IO.File.Exists(OpenFileDialog1.FileName) Then
            PictureBox1.Image = New Bitmap(OpenFileDialog1.FileName)
            'Махинации с изображением
            Dim ms As New IO.MemoryStream
            PictureBox1.Image.Save(ms, Imaging.ImageFormat.Png)
            Return System.Convert.ToBase64String(ms.ToArray)
        Else
            Return ""
        End If
    End Function

Вполне работоспособен!

Можно конечно сделать как предлагает MIT, способ довольно хорош, но придется поработать головой.


Пасиб, все работает.

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сохранение рисунка в Base64

Сообщение Joo » 04.07.2009 (Сб) 8:09

Не за что
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 91

    TopList