Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Загрузка картинки


Автор: andrey_pro 19.10.2009, 18:20
У меня на форме есть контрол PictureBox в него я загружаю картинку которая лежит на диске.
Сам PictureBox имеет размеры 150х150, а сама картинка очень большая 4mb. Из-за большова размера загрузка тормозит.

написал код, при загрузке картинка уменьшается до нужного размера и занимает мало памяти:

Код

// Интерполяционное преобразование размера
        private Bitmap ConvertImage2(Bitmap inBmp)
        {
            int X_new;
            int Y_new;
            GetProporcion(inBmp.Width, inBmp.Height, out X_new, out Y_new);
            Bitmap outBmp = new Bitmap(X_new, Y_new, PixelFormat.Format24bppRgb);
            Graphics g = Graphics.FromImage(outBmp);
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            g.DrawImage(inBmp, 0, 0, outBmp.Width, outBmp.Height);
            return outBmp;
        }


Сейчас нормально картинка обрезается, и занимает мало памяти (на форме у меня много таких картинок), НО загрузка всеравно долгая!

Есть ли простой способ реализовать загрузку картинки.

Автор: explorer 19.10.2009, 18:51
Загрузка долгая, потому что все еще обрабатывается большая картинка (перед тем, как она будет уменьшена). Можно попробовать отдельный поток на загрузку картинки. Будет работать быстрее, но потребует затрат сил и времени на организацию многопоточности. 

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


Автор: andrey_pro 19.10.2009, 21:32
Картинки и так загружаю в отдельном потоке, не в этом дело.

Вот если открыть простую папку и в ней сделать вид "Эскизы страниц", то картинки в этой папке грузятся намного быстрее. Я вот хочу организовать подобное на своей форме.

Автор: nmn 20.10.2009, 02:03
Цитата(andrey_pro @ 19.10.2009,  21:32)
Картинки и так загружаю в отдельном потоке, не в этом дело.

Вот если открыть простую папку и в ней сделать вид "Эскизы страниц", то картинки в этой папке грузятся намного быстрее. Я вот хочу организовать подобное на своей форме.

Эскизы хранятся в Thumbs.db

Автор: andrey_pro 20.10.2009, 10:22
А как можно прочитать Thumbs.db?

Автор: nmn 20.10.2009, 18:49
http://ru.wikipedia.org/wiki/Thumbs.db
http://www.vsj.co.uk/articles/display.asp?id=628

Автор: andrey_pro 3.11.2009, 10:11
Ну а всетаки можно как нибудь быстрее картинки загружить не из Thumbs.db?
Может есть специальные библиотеки для этого?

Автор: nmn 3.11.2009, 11:38
Цитата(andrey_pro @ 3.11.2009,  10:11)
Ну а всетаки можно как нибудь быстрее картинки загружить не из Thumbs.db?
Может есть специальные библиотеки для этого?

заранее загружать, а потом просто показывать, ACDSee тоже не мгновенно загружает

Автор: andrey_pro 3.11.2009, 14:51
Дело в том что в ACDSee загружаются картинки гораздо быстрее чем у меня!

Хочу так же быстро!

Автор: andrey_pro 5.11.2009, 08:31
никто не знает? очень надо.

Автор: Zakonnic 5.11.2009, 15:01
Расставьте брекпоинты и выделите самый долгоиграющий кусок. Запостите его сюда. 
Если в ACDSee картинка загружается быстро, значит она не такая уж большая.

Автор: nmn 5.11.2009, 15:17
Цитата(Zakonnic @ 5.11.2009,  15:01)
Расставьте брекпоинты и выделите самый долгоиграющий кусок. Запостите его сюда. 
Если в ACDSee картинка загружается быстро, значит она не такая уж большая.

лучше профайлером, в 2005 студии был встроенный

Автор: andrey_pro 6.11.2009, 10:46
Потестировал на время
загружал последовательно 10 рисунков по 4 мб.

на метод new Bitmap(filename) - 6 сек.

на ConvertImage2(Bitmap inBmp) - 4 сек.

итого получается 10 сек.

меня интересует как можно загружать быстро картики (new Bitmap(filename)) ?

Автор: Zakonnic 6.11.2009, 14:22
Попробуй что-то вроде этого, должно быть чуть быстрее:
Код

Bitmap.FromStream(new FileStream(filename, FileMode.Open), true, false);

Автор: andrey_pro 11.11.2009, 08:22
Цитата(Zakonnic @  6.11.2009,  14:22 Найти цитируемый пост)
Попробуй что-то вроде этого, должно быть чуть быстрее:код C#1:Bitmap.FromStream(new FileStream(filename, FileMode.Open), true, false);


попробывал! просто супер быстро загружает картинки!

теперь бы еще сепер быстро сжать до нужного размера.
делаю через метод ConvertImage2(Bitmap inBmp) но он занимет 4 сек для 10 картинок. Это очень много, как можно быстрее???

Автор: andrey_pro 20.11.2009, 10:57
никто не знает?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)