Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с ресурсами, чтение 
V
    Опции темы
WERITAS
Дата 12.11.2007, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Доброго времени суток. Программно создаю файл ресурсов, помещаю туда изображение. А при чтении из этого файла в массив байтов получается, что в этот массив записывается что-то не то, потому что из него потом рисунок подгрузить не получается (parameter is not valid)
Код

        // Добавить изображение
        private void button3_Click(object sender, EventArgs e)
        {
            ResourceWriter rw = new ResourceWriter("MyRes.resources");
            Image img1 = new Bitmap("1.jpg");
            rw.AddResource("1jpg", img1);
            rw.Generate();
            rw.Close();
        }

        // Подгрузить изображение
        private void button4_Click(object sender, EventArgs e)
        {
            ResourceReader rr = new ResourceReader("MyRes.resources");

            string str = "Bitmap";
            byte[] mass = new byte[1024000];
            
            rr.GetResourceData("1jpg", out str, out mass);
            pictureBox1.Image = Image.FromStream(new MemoryStream(mass));  // <-- Вот на этой строке приложение аварийно завершается.
           
            rr.Close();
        }



--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
stab
Дата 12.11.2007, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1839
Регистрация: 1.1.2003

Репутация: 22
Всего: 48



используй ResourceWriter.AddResourceData, а не AddResource.

Добавлено через 1 минуту и 5 секунд
..
Код

            string str = "Bitmap";
            byte[] mass = new byte[1024000];

вот это лишнее. просто:
Код

            string str;
            byte[] mass;



--------------------
6, 6, 6 - the number of the beast.
PM MAIL WWW   Вверх
tol05
Дата 12.11.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 63
Всего: 170



или старое доброе "ЭТО" smile
Код

private void button4_Click(object sender, EventArgs e)
{
    ResourceManager rm = ResourceManager.CreateFileBasedResourceManager("MyRes", ".", null);
    pictureBox1.Image = rm.GetObject("1jpg") as Bitmap;
}

кстати, зачем инициализировать строку и массив при чтении, если это out параметры и будут в любом случае пере-инициализированы в теле метода? Просто выделить памяти на 1024000, чтоб сборщик мусора не скучал?

Это сообщение отредактировал(а) tol05 - 12.11.2007, 19:29


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
1stain
Дата 12.11.2007, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



Код

        private void saveImgBtn_Click(object sender, EventArgs e)
        {
            using(MemoryStream ms = new MemoryStream())
            {
                _img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                using (ResourceWriter rw = new ResourceWriter("MyRes.resources"))
                {
                    rw.AddResourceData("img1", "System.Drawing.Image", ms.GetBuffer());
                    rw.Generate();
                }
            }
        }

        private void loadImgBtn_Click(object sender, EventArgs e)
        {
            Byte[] bitmap;
            string typeName;
            using ( ResourceReader rr = new ResourceReader( "MyRes.resources" ))
            {
                rr.GetResourceData("img1", out typeName, out bitmap);
            }
            using (MemoryStream ms = new MemoryStream(bitmap))
            {
                pictureBox1.Image = Image.FromStream(ms);
            }
        }


упс, опоздал smile

Это сообщение отредактировал(а) 1stain - 12.11.2007, 19:39


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
WERITAS
Дата 12.11.2007, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


********
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 2.5.2005
Где: Москва

Репутация: нет
Всего: 5



Всем СПАСИБО! Вопрос решён smile

Цитата(tol05 @  12.11.2007,  19:29 Найти цитируемый пост)
кстати, зачем инициализировать строку и массив при чтении, если это out параметры и будут в любом случае пере-инициализированы в теле метода?

Действительно. На автомате как-то выделил память и даже не заметил smile


--------------------
Арт-менеджер клуба, разрешивший концерт Алексея Глызина, уволен с формулировкой "Мудак"
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1147 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.