-
Здравствуйте. Для загрузки картинок я использую tinyJPGGIFBMP. собсно так я загружаю pic:pbitmap; ffilename:string; if ffilename<>'' then ffilename:=path+picfiles.Items[picnum]; pic.Clear; tinyLoadJPGGIFBMPfile(pic,ffilename); ну а дальше идет масштабирование и рисование картинки
SetStretchBltMode(paintbox1.canvas.Handle, HALFTONE); if kx*ky<>1 then //масштабы pic.StretchDraw(paintbox1.canvas.handle,rect) else pic.Draw(paintbox1.canvas.Handle,0,0);
Проблема вот в чем: все хорошо и довольно быстро работает, если размер картинок маленький, но если картинка весит прилично, то до отображения картинки проходит достаточно большое время (бывает по полсекунды), хотя в ACDSee она загружается меньше чем за 0.1сек. Как можно уменьшить это время? Хотелось бы не отказываться от tinyJPGGIFBMP...
-
Конкретно с inyJPGGIFBMP не разбирался но во всех приложениях на KOL для работы с файлами очень помогает FASTMM4 и FASTMOVE до кучи - вроде не очевидно но разницу почувствуешь сразу ).
-
1) ACDSee грузит картинку под конкретный размер окна (для больших это может быть 1/2, 1/4, 1/8 картинки). Также использует "read-ahead", т.е. грузит следующую картинку во время просмотра текущей. 2) tinyJPGGIFBMP использует системную (т.е. FASTMM4 и FASTMOVE никаким боком не помогут) функцию OleLoadPicture, это относительно медленный метод, к тому же не поддерживающий загрузку в уменьшенном масштабе.
-
Точно, посмотрел на исходники - homm поленился и все сделал через OLE, а вот tinyPNG - совсем другое дело, там мой совет будет работать.
-
Вряд ли "поленился", расписанный более-менее вручную (на самом деле через сишные obj) jpeg на тот момент уже существовал - JpegObj.pas, а варианта для KOL через OLE ещё не было. Опять же, в плане размера exe этот вариант почти "бесплатный". tinyPNG не поддерживает альфа-канал, и экономию по сравнению с KOLPng даёт довольно сомнительную.
-
Что по мне так лучше уж "потяжелее" - лишь бы быстро работало.
-
Тоесть мне ничего не остается кроме как реализовывать read-ahead?
-
А оно тебе реально надо? Смысла, кроме самообразования, я здесь не вижу. Этих ACDSee уже шопесец развелось, даже Кладов баловался - стучись к нему может че подскажет. Как вариант использовать замену tinyJPGGIFBMP.
PS. Если есть море свободного времени, например после сессии, и хочется посвятить его программированию, попробуй поискать софтвенные фирмы в твоем городе - они обычно на лето народ на обучение/работу набирают - вот там действительно будет интересно. Если живешь в местности, где нет таких контор, то поищи open-source проекты - там и опыта наберешься и с обществу польза может быть будет).
-
>exero (22.05.08 18:09) [7] спасибо за советы, приму на заметку :)
|