Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Графика и игры
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.03.2012, 13:33
Oreon Oreon вне форума
Прохожий
 
Регистрация: 27.03.2012
Сообщения: 36
Репутация: 10
По умолчанию Изменение размера изображений в потоке

Доброго всем дня! Смиренно надеюсь на вашу помощь в попытке разобраться в проблеме. Через GDI+ потоками перебираю массив изображений (тысячи), в данном кусочке кода меняю размер. im8bpp, im:TGPBitmap; mpict[j].Loct - массив в котором хранятся данные о изображениях (Loct-путь). Перебор индекса масива - через глобальную переменную (каждый поток хапнул свой индекс и инкрементнул его для следующей итерации, через критическую секцию). kvcnt - содержит новый размер и не меняется при запущенном потоке.
Код:
  im := TGPBitmap.Create(mpict[j].Loct); 
  im8bpp:=TGPBitmap.Create(kvcnt,kvcnt,PixelFormat32bppARGB);   
  gp:=TGPGraphics.Create(im8bpp);
//  gp.SetSmoothingMode(SmoothingModeHighSpeed);
//  gp.SetInterpolationMode(InterpolationModeLowQuality);
//это была попытка убрать красивости в угоду скорости - эффект - 0.
  gp.DrawImage(im,0,0,kvcnt,kvcnt);
  gp.Free;
  im.Free;
Админ: Пользуемся тегами для оформления кода!

//дальнейшая обработка im8bpp, ее отключал она на производительность не влияет
Вопрос: Почему работает все равно в один поток. Я что один поток запускаю что 2 - время выполнения не меняется. В этой же программе аналогичным способом через потоки организована обработка масивов - там нагрузка логичным образом стремится занять весь проц и стремится к 100%, здесь же располагается на одном ядре до 50%. В потоках никакие визуальные компоненты не трогаю (все прогресбары и текстовое сопровождение реализованы через поток главной формы //их тоже отключал, на нагрузке и времени выполнения никак не сказываются). Пришел к выводу что это этот кусочек кода. Помогите разобраться, что не так.
PS: возможно логичнее было начинать не в теме про графику, а в теме про потоки, но поскольку темы про потоки не нашел, а работаю с графикой - разместил здесь. Прошу не пинать
Ну и вдогонку еще вопрос: команда im:=im8bpp; не приводит к ошибке, картинка через переменную im в дальнейшем корректно (насколько могу судить) обрабатывается, но попытка сделать im8bpp.Free; - приводит к ошибке, а я ж ее освободил, или нет? и если при таком раскладе im является указателем на im8bpp, то как их корректно "размножить", ну типа а:=2; b:=a; далее в b имеем значение 2, а с а делаем дальше что хотим. Надо вот также но с картинкой TGPBitmap как сделать?

Последний раз редактировалось Admin, 29.03.2012 в 13:47.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:37.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025