Главная страница
    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.013 c
6-1132395921
[ S.F.I.N.X ]
2005-11-19 13:25
2006.03.05
PID процесса


5-1126297047
TStas
2005-09-10 00:17
2006.03.05
Работает в disigntime но не работает в runtime


15-1139576650
denis24
2006-02-10 16:04
2006.03.05
компонент типа dateedit


15-1139765957
PARUS
2006-02-12 20:39
2006.03.05
Параметры


1-1138621521
DelphiLexx
2006-01-30 14:45
2006.03.05
DBGridEh работа с checkboxes





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский