![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
исчезает 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));