Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.012 c
15-1139587887
PARUS
2006-02-10 19:11
2006.03.05
Доступ по сети.


4-1134632103
FunkyByte
2005-12-15 10:35
2006.03.05
Как получить имя процесса


1-1137522366
S_T_E_P_A_N___
2006-01-17 21:26
2006.03.05
Отладка DLL


2-1139805854
Officeman
2006-02-13 07:44
2006.03.05
randomize;


15-1139650945
Yanis
2006-02-11 12:42
2006.03.05
Вот это война :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский