Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Куда пропадает изображение в TImage?

830
28 февраля 2006 года
MVal
76 / / 17.10.2002
На форме TScrollBox, в нем TImage. Вывожу в него TBitmap (с частотой 1-5 fps) методом Image1->Picture->Assign(Bitmap);
ScrollBox-у выставил ScrollBox1->DoubleBuffered=true, чтобы меньше моргало.
Все бы было хорошо, но иногда (по непонятной мне причине) изображение в этом Image пропадает (он становится как-бы невидимым - вижу цыет фона). При следуещем выводе оно снова появляется (но не всегда). Особенность проги в том, что вывод идет то подряд неск. кадров, потом может долгое время (если выводить нечего) стоять.
Если при этом как-раз изображение пропадет - то это выглядит не очень красиво :(.
Кто-нибудь встречался с подобной бедой? И как с ней бороться? Или хотя-бы поймать событие, что оно пропало (единственное что идет в голову - снимать скриншет и в нем считать сколько пикселей одного цвета - но это же не есть гуд).
830
01 марта 2006 года
MVal
76 / / 17.10.2002
Попробовал еще такой "извращенный" метод.
 
Код:
TMemoryStream *tmp2 = new TMemoryStream();
 Bitmap->SaveToStream(tmp2);
 tmp2->Position=0;
 Image1->Picture->Bitmap->LoadFromStream(tmp2);
 tmp2->Clear(); //Без этого пробовал - то же самое.
 delete tmp2;

С ним изображение не теряется, но, примерно с сотого кадра начинают вылетать EOutOfResource с сообщением "The handle is invalid". Вроде я TMemoryStream создал - тут же удалил. Какая тут утечка ресурсов может быть?
830
02 марта 2006 года
MVal
76 / / 17.10.2002
Может быть какое-то переполняется и надо чего-нибудь опусташать? Только что?
А что можно еще использовать вместо TImage?
TPaintBox не понравился - плохо скролится да и скорость прорисовки еще хуже.

Или например каким-нибудь DirectDraw-ом вывести в панельку (только я плохо себе представляю (точнее вообще не представляю), как это реализовать). И насколько от этого "потяжелеет" програмка. (Хотя это, по моему, слишком экстремально для данной задачи).

Есть у кого-нибудь пример как TBitmap вывести на куда-нибудь этим методом? Или какой-нибудь метод как вернуть TImage на путь праведный.

Да один момент не сказал - получение изображения и вывод его в этот Image идет в отдельном потоке. Перенести в основной и запускать по таймеру - тоже пробовал - то же самое.

Если кто может - подайте идею в чем тут дело. Уже столько времени бьюсь головой об этот TImage и он ни как не сдается.
:( :( :(
830
06 марта 2006 года
MVal
76 / / 17.10.2002
Как оказалось проблема была не столько в самом TImage.
До этого я получаю Jpeg в TGPEGImage и преобразую его в TBitmap методом Assign. Затем вклеиваю в другой Bitmap.
Код:
TJPEGImage *jp = new TJPEGImage();
Graphics::TBitmap *image = new Graphics::TBitmap();
jp->LoadFromStream(tmp); //TMemoryStream
jp->DIBNeeded();
image->Assign(jp);
Sleep(unsigned (10)); //Без этого слипа почему-то вылетает Acces Violation
BMP->Canvas->Draw(x,y,image); //TBitmap
Image1->Picture->Assign(BMP); //TImage
//...
delete jp;
delete image;

Почему-то проблема была в image->Assign(jp);. Попробовал image->Canvas->Draw(0,0,jp) - вроде бы стало держаться дольше (непонятно только, почему?). Но иногда всеравно вылетает в пустой экран.
Что не так с методом Assign? Вродебы именно он является стандартным к применению в данной ситуации. И как правильнее распаковывать TGPEGImage -> TBitmap?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог