Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизПроблема с работой с TBitmap. Найти похожие ветки
← →
Дмитрий Белькевич (2006-01-31 02:23) [0]Есть ли какие-либо особенности использования tbitmap"а в потоках? Какие-то глюки совсем неясной природы, до белый экран вместо картинки, то нехватка системных ресурсов при savetofile, хотя я этих русурсов почти не потребляю, то выдаёт "не могу сохранить файл - файл уже присутствует на диске". Вообще не представляю, откуда глюки берутся. Битмапы средние по размеру - около 1000х1000, честный dib, просто два локальных битмапа в процедуре.
← →
Джо © (2006-01-31 02:31) [1]> Проблема с работой с TBitmap.
> Дмитрий Белькевич (31.01.06 02:23)
> Есть ли какие-либо особенности использования tbitmap"а в
> потоках?
Главная особенность, конечно, в том, что TBitmap не потокобезопасный класс. Не происходит ли обращение к методам и свойствам одного экземпляра TBitmap из разных потоков?
← →
Defunct © (2006-01-31 02:50) [2]Глюки берутся из GDI..
по потокобезопастности TBitmap"a могу сказать, что проблем никогда с этим не замечал. А вот при изменении размера расходуется GDI ресурс причем катастрофически.
Один из возможных вариантов лечения: использовать MemoryStream вместо второго TBitmap"a.. если не поможет - тогда сокращать размер...
PS: как проверяли, что он честный dib? Глюки свидетельствуют об обратном.
← →
Германн © (2006-01-31 03:08) [3]
> Defunct © (31.01.06 02:50) [2]
>
> Глюки берутся из GDI..
Давно не встречал. В 9х были, но в сабже ХР.
А вот "белый экран вместо картинки", упомянутый в сабже, наводит на мысль! Пока правда не очень чёткую.:(
← →
Дмитрий Белькевич (2006-01-31 04:52) [4]
> Не происходит ли обращение к методам и свойствам одного
> экземпляра TBitmap из разных потоков?
Битмапы - локальные, внутри метода потока, наружу не торчат вообще. Потока один экземпляр, хотя в случае локальных разницы быть не должно.
> что он честный dib
Имелось в виду pf24bit, безо всяких извратов, из-за которых всякое вылазит.
> Глюки берутся из GDI..
Это понятно, не понятно - что ему под xp-то не хватает, ладно - 98, у неё с пулом ограниченным гемор, а тут - что?
> А вот при изменении размера расходуется GDI ресурс
Самое обидное, что только один раз - во время создания.
В одном месте откопал выход за границу массива пикселей (вернее, сканлинии) при заполнении битмапа. Индекс на единицу больше края был, так и думал, что часть глюков - из-за памяти, хотя повключал range check, не помогло, руками пришлось, больно место подозрительное. Прибил - белые картинки перестали вылазить, out of resource всё равно при savetofile вылазит.
Вылазит на строчке
Save := GDICheck(SelectObject(FCanvas.FHandle, FDIBHandle));
в graphics.pas.
← →
Defunct © (2006-02-02 02:15) [5]>> что он честный dib
> Имелось в виду pf24bit, безо всяких извратов, из-за которых всякое вылазит.
у TBitmap есть метод DibNeeded или типа того (уже не помню), его хорошо бы вызвать сразу после создания (перед изменением размера).
> Это понятно, не понятно - что ему под xp-то не хватает, ладно - 98, у неё с пулом ограниченным гемор, а тут - что?
В xp похоже тоже самое, только ограничения другие.
← →
Sapersky (2006-02-02 13:12) [6]Использовать TFastDIB, у которого GDI можно отключить вообще (битмап в этом случае - область памяти, выделенная GetMem) - это, конечно, совершенно неприемлемый вариант? :)
← →
DVM © (2006-02-02 16:16) [7]Были как то подобные глюки у меня. Вылечил тем что блокировал канву битмапа перед любыми операциями с битмапом и разблокировал после.
← →
Eraser © (2006-02-02 17:46) [8]
> Дмитрий Белькевич
так же глянь в сторону GdiFlush... а вообще скорее всего ошибки в алгоритме.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c