C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Удаление картинки из TImage, ... но не удаляя сам TImage
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
Круто я себя в один ряд поставил. smile.gif
Имел в виду, что у меня в голове бардак с 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"-файла, то исчезает.

Вернуться в Вопросы программирования в C++Builder