vvoid |
Отправлено: 06.03.2006, 14:08 |
|
Машинист паровоза
Группа: Участник
Сообщений: 171
|
Всем всего...
Как удалить картинку из TImage, не удаляя при этом сам TImage?
Картинка в TImage записана при помощи виндовых средств с использованием HDC (TImage->Canvas->Handle = HDC).
|
|
Grigoriy |
Отправлено: 06.03.2006, 16:35 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
**
Отредактировано Grigoriy — 06/03/2006, 16:49
|
|
vvoid |
Отправлено: 06.03.2006, 16:51 |
|
Машинист паровоза
Группа: Участник
Сообщений: 171
|
Это из Help-а к C++ Buider 5 (статья "Overview of graphics programming")
QUOTE |
Note: Since TCanvas is a wrapper resource manager around the Windows device context, you can also use all Windows GDI functions on the canvas. The Handle property of the canvas is the device context Handle. |
А суть в том, что мне надо выводить Tiff изображение.
Здесь я подробно написал как я это сделал: Показать tiff рисунок Там у меня и началась возня с HDC и появились вопросы.
PS*
А чего код нужен то?
PPS* Круто, а что с предыдущим постом уважаемого Grigoriy???
Отредактировано vvoid — 06/03/2006, 16:53
|
|
Grigoriy |
Отправлено: 06.03.2006, 17:52 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (vvoid @ 06/03/2006, 16:51) | PPS* Круто, а что с предыдущим постом уважаемого Grigoriy??? |
Извините, ошибся сам.
Я сам вытер сообщение.
Просто не знал, что TImage->Canvas->Handle это контекст устройства.
Хотя какие-то глюки происходят.
А именно, если написать вот такой обработчик события кнопки
CODE |
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Image1->Canvas->Handle=GetDC(Form1->Handle);
Form1->Canvas->MoveTo(10,10);
Form1->Canvas->LineTo(60,60);
Image1->Repaint();
}
|
то линия появляется и на форме и на Image1.
А если бы обработчик события был вот таким
CODE |
//!!!Глобальная переменная !!!
HDC DC1;
//.............................
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
DC1=Image1->Canvas->Handle;
Image1->Canvas->Handle=GetDC(Form1->Handle);
Form1->Canvas->MoveTo(10,10);
Form1->Canvas->LineTo(60,60);
Image1->Repaint();
}
|
то линия на Image1 почему-то не рисуется, а только на форме появляется.
Чем влияет предыдущее присваивание контекста ?
А если написать так
CODE |
//!!!Глобальная переменная !!!
HDC DC1;
//.............................
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
Image1->Canvas->Handle=GetDC(Form1->Handle);
Form1->Canvas->MoveTo(10,10);
Form1->Canvas->LineTo(60,60);
Image1->Repaint();
}
void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
DC1=Image1->Canvas->Handle;
}
|
и сначала клацнуть на BitBtn4,
а потом на BitBtn1, то
сначала после нажатия на BitBtn4 область Image1 зарисовывается белым цветом, а потом после нажатия на BitBtn1 линия рисуется как на на форме, так и на Image1. Причем, если возле линии на форме присутствует сама кнопка BitBtn4, то ее часть изображения даже рисуется на Image1.
|
|
Grigoriy |
Отправлено: 06.03.2006, 17:54 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (vvoid @ 06/03/2006, 16:51) |
Здесь я подробно написал как я это сделал: Показать tiff рисунок Там у меня и началась возня с HDC и появились вопросы.
|
Читайте там мое очередное сообщение.
https://rxlib.ru/forums/index.php?ac...dc9f3f220c71262
Отредактировано Grigoriy — 06/03/2006, 19:23
|
|
vvoid |
Отправлено: 06.03.2006, 18:10 |
|
Машинист паровоза
Группа: Участник
Сообщений: 171
|
Бардак какой-то с этим HDC...
Причём у всех... и у меня, и у мелкософтовцев, и у борландевцов.
Особенно мне понравился прикол с присваиванием....
Отредактировано vvoid — 06/03/2006, 18:12
|
|
vvoid |
Отправлено: 06.03.2006, 18:11 |
|
Машинист паровоза
Группа: Участник
Сообщений: 171
|
:OFFTOP
Круто я себя в один ряд поставил.
Имел в виду, что у меня в голове бардак с HDC.
|
|
Grigoriy |
Отправлено: 06.03.2006, 19:23 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE | Бардак какой-то с этим HDC...
Причём у всех... и у меня, и у мелкософтовцев, и у борландевцов. |
Нет, с HDC все нормально.
Просто сам компонент не хочет работать так как вы хотите.
Читайте последнее мое сообщение в топике
https://rxlib.ru/forums/index.php?ac...dc9f3f220c71262
|
|
vitavita |
Отправлено: 08.03.2006, 08:29 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 59
|
Если по сути вопроса
ImageMain->Picture->Bitmap->FreeImage(); |
|
Grigoriy |
Отправлено: 08.03.2006, 18:45 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (vitavita @ 08/03/2006, 08:29) | Если по сути вопроса
ImageMain->Picture->Bitmap->FreeImage(); |
Но так не всегда исчезает изображение.
Например, если изображение сформировано из "*.bmp"-файла, то оно не исчезает. А если загружено из "*.jpg"-файла, то исчезает.
|
|