Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Вниз

Почему сбоят битмапы   Найти похожие ветки 

 
oleg__   (2006-06-27 10:20) [0]

Здравствуйте!

Пишу проект, который работает с графикой. На форме есть Image, есть два буферных Bitmap`а - один для фона (Bmp1), второй для изображения (Bmp2), которое периодически выводится на Image методом Image.Bitmap.Canvas.Draw(0, 0, Bmp2). Вырисовка и вывод изображения производится достаточно интенсивно - десятки раз в секунду. Инициирует вырисовку внешний COM-объект, которому в качестве параметра передана callback процедура из Delphi.

Проблема такая - в определенный момент изображение на Bmp2 "замирает", перестает реагировать на функции рисования (LineTo, Arc и т.п.). Либо перестает работать функция Bmp2.Canvas.Draw(0, 0, Bmp1), то есть фон не копируется, хотя рисовать можно.

Иногда (редко) вылазит ошибка EOutOfResource. Никаких "Access violation" никогда не возникает. Раньше был еще такой глюк - незадолго перед "зависанием" битмапа, находящаяся на форме TLabel начинала выводится не на форму а на рабочий стол в левый верхний угол.

Помогите кто чем может !!!


 
REA   (2006-06-27 10:26) [1]

1) возможны конфликты потоков
2) возможны утечки ресурсов


 
Desdechado ©   (2006-06-27 11:23) [2]

2 - очень вероятно, тем паче "ошибка EOutOfResource" и недостача хэндлов "TLabel начинала выводится не на форму а на рабочий стол"


 
oleg__   (2006-06-28 13:06) [3]

спасибо REA, Desdechado

Похоже все-таки дело в потоках. Перенёс всю тяжелую работу из Callback-процедуры в событие, в Callbacke поставил SendMessage самому себе на это событие. Глюки исчезли.

Но в чем дело до конца так и непонял. Дело в COM-объекте или моей проге (прога простая, однопотоковая) ?

Кто хорошо знаком с COM, подскажите где искать?


 
oleg__   (2006-06-28 13:12) [4]

забыл одну мелочь - прога не совсем простая, это COM-объект в виде dll, которая вызывает другой COM-объект


 
tsa   (2006-06-28 13:14) [5]

эксперимент проведи - битмапы сделай раз в 10 меньше и посмотри. если реже сбоить станут, значит машинка слабая у тебя, а сейчас летом так всё дешевеет ;-)


 
oleg__   (2006-06-28 13:18) [6]


> эксперимент проведи - битмапы сделай раз в 10 меньше и
> посмотри. если реже сбоить станут, значит машинка слабая
> у тебя, а сейчас летом так всё дешевеет ;-)


уже проводил, чем меньше битмапы - тем реже сбои


 
han_malign ©   (2006-06-28 17:51) [7]

Canvas.Lock;
.......
Canvas.Unlock;


 
DVM ©   (2006-06-29 10:08) [8]

Лучше все рисовать из основного потока. Canvas.Lock это конечно хорошо, но примениять все же лучше в крайнем случае.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.08.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.051 c
2-1153895423
Константин_
2006-07-26 10:30
2006.08.13
Выборка определенного количества символов в SQL запросе


15-1153122943
ChainikDenis
2006-07-17 11:55
2006.08.13
Программирование под линух...


2-1154001896
DprYg
2006-07-27 16:04
2006.08.13
Флаг синхронизации, семафор, событие


2-1153167336
Footballer
2006-07-18 00:15
2006.08.13
Подскажите, пожалуйста...


4-1145373726
Uran
2006-04-18 19:22
2006.08.13
Определить программно расположение.





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