Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.06.2015, 15:01   #1
[CYBOR]
 
Регистрация: 28.09.2014
Сообщений: 5
Печаль При записи иконки в Base64 получаются битыми

Помогите, пожалуйста. Как это исправить?


Icon->byte[]
Код:
        public static byte[] ToByteArray(this Icon icon)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                icon.Save(ms);
                return ms.GetBuffer();
            }
        }
byte[]->Base64
Код:
                    if (Current.Icon != null)
                    {
                        Writer.WriteStartElement("Icon");
                        var buffer = Current.Icon.ToByteArray();
                        Writer.WriteBase64(buffer, 0, buffer.Length);
                        Writer.WriteEndElement();
                    }
Base64->byte[]
Код:
                                if (AppContentReader.IsStartElement("Icon"))
                                    using (var OS = new MemoryStream())
                                    using (var bw = new BinaryWriter(OS))
                                    {
                                        int ReadBytes = 0;
                                        byte[] buffer = new byte[100];
                                        while ((ReadBytes = AppContentReader.ReadElementContentAsBase64(buffer, 0, 50)) > 0)
                                            bw.Write(buffer, 0, ReadBytes);
                                        CurrentApp.Icon = OS.GetBuffer().ToIcon();
                                    }
byte[]->Icon
Код:
        public static Icon ToIcon(this byte[] bytes)
        {
            using (MemoryStream ms = new MemoryStream(bytes)) return new Icon(ms);
        }
[CYBOR] вне форума Ответить с цитированием
Старый 26.06.2015, 15:35   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

А вы часом startElement И endElement при "восстановлении" иконки в массив байт не считываете?
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 26.06.2015, 16:21   #3
[CYBOR]
 
Регистрация: 28.09.2014
Сообщений: 5
По умолчанию

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

В общем, разобрался.
Может кому-то поможет:
Код:
        public static byte[] ToByteArray(this Icon icon)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                icon.ToBitmap().Save(ms, ImageFormat.Png);
                return ms.GetBuffer();
            }
        }
        public static Icon ToIcon(this byte[] bytes)
        {
            using (MemoryStream ms = new MemoryStream(bytes)) return Icon.FromHandle(new Bitmap(ms).GetHicon());
        }

Последний раз редактировалось Stilet; 14.07.2015 в 14:46.
[CYBOR] вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при подстановке данных в полученное из процессора уравнение тренда получаются значения не соответствующие наблюдаемым на графике Яков Николаевич Microsoft Office Excel 1 30.10.2014 15:44
Большие иконки иконки exe файла Сидоров Паскаль, Turbo Pascal, PascalABC.NET 12 02.10.2014 17:41
Потеря регистра букв при шифровании в base64 Dominatorsha Общие вопросы .NET 1 03.02.2014 17:39
MediaPlayer считает файлы битыми ramzes777 Мультимедиа в Delphi 3 24.10.2011 19:20
При печати из PDF получаются иероглифы mokar Софт 2 30.08.2010 20:44