Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

исчезает Image при простых действиях [D7, XP]


Евгений07 ©   (2013-01-05 16:17:00) 

Доброго времени!
После сборки 2х отлаженных кусков возникла ошибка с изображением
Вырезал
1. Form1, просто читаю фото формат JPEG в Form2 =
procedure TForm1.FileListBox2Click(Sender: TObject);
begin
 Form2.Show;
 Form2.Image1.Picture.LoadFromFile(FileListBox2.FileName);
end;

2. Form2 =
type
 TForm2 = class(TForm)
   Image1: TImage;
   Button1: TButton;
   Button3: TButton;
 private
procedure Canny(const bm_in: TBitmap);
. . .
procedure TForm2.Canny(const bm_in: TBitmap);
var        h: longint;
begin
 h :=  0;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
 Canny(Image1.Picture.Bitmap);
end;

procedure TForm2.Button3Click(Sender: TObject);
var        Width, Height: longint;
begin
Width := Image1.Picture.Bitmap.Width;
end;

3. = Form2.Button1Click и Image1 исчезает
      В отладке работает

4. = Form2.Button3Click и Image1 исчезает

В чем может быть проблема?


Медвежонок Пятачок   (2013-01-06 00:22:00) [1]

Чтение Image1.Picture.Bitmap.Width уничтожает картинку

Ну так не читай если уничтожает.
читай Image1.Picture. Graphic.Width


Евгений07   (2013-01-05 23:14:00) [2]

Медвежонок Пятачок
У меня проблема не в определении размеров БитМапа
Надо:
1.1. Из кадра видеокамеры надо вырезть кусок фото, примерно 1000*1600
1.2. Получить контур методом Канни (это лучший)
1.3. По определенному шаблону надо вырезать фото объекта (видео реальное, объект может быть искажен, тени)
1.4. Синтез фото = объект + фон + финтифлюшки

2. Работа с фото = часть работы с сайтом

По отдельности все работает
Вместе - нет
Я чего-то не понимаю в работе с БитМап
Где чего читнуть?


Медвежонок Пятачок   (2013-01-05 17:47:00) [3]

Чтение Image1.Picture.Bitmap.Width уничтожает картинку

Image1.Picture. Graphic.Width


Евгений07   (2013-01-05 17:42:00) [4]


> Медвежонок Пятачок

Чтение Image1.Picture.Bitmap.Width уничтожает картинку
И так ShowMessage(IntToStr(Image1.Picture.Bitmap.Width));
И так Width := Image1.Picture.Bitmap.Width;
Почему?
Пока нашел
Имея дело с классом TBitmap, учитывайте, что принцип "один объект — один дескриптор" из-за наличия механизма кэширования неверен. Два метода:
   function ReleaseHandle: HBITMAP;
   function ReleasePalette: HPALETTE;
возвращают дескрипторы битовой карты и палитры соответственно, а после этого обнуляют дескрипторы, т. е. как бы "отдают" их пользователю.
При любом внешнем обращении к дескриптору битовой карты и любой попытке рисовать на ее канве разделение одной картинки несколькими объектами прерывается, и объект получает собственную копию содержимого дескриптора.
Copied from: http://articles.org.ru/delphi7/Glava10/index11.php

Прощайте
Меня ведут в театр


Медвежонок Пятачок   (2013-01-05 17:15:00) [5]

В том, что

ShowMessage(IntToStr(Image1.Picture.Bitmap.Width));


Наверх

Титульная страница Поиск, карта сайта Написать письмо