Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2015, 08:20   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Перерисовываем картинку с TImage на TPanel

Всем привет. Вот такой вопрос, как можно перерисовать картинку с TImage на TPanel ?

Вот небольшой мой набросок

Код:
__fastcall TMyPanel::TMyPanel(TComponent* Owner, TForm *Form, TImage *img):TPanel(Owner)
{
	this->Parent = Form;
	this->Width = 200;
	this->Height = 200;
	this->Left = 0;
	this->Top = 0;
	this->Caption="";

	this->Canvas->Draw(0,0,img->Picture->Graphic);
}
Код:
class TMyPanel: public TPanel  {
	private:
	public:
		__fastcall TMyPanel(TComponent* Owner, TForm *Form, TImage *img);
	__published:
		__property Canvas;
};
Код:
	TMyPanel *Pnl = new TMyPanel(this, Form1, Image1);
В итоге программа компилируется, экземпляр TPanel появляется, но рисунка на нём нет ...
-Jack- вне форума Ответить с цитированием
Старый 26.04.2015, 09:34   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Надо переопределить метод Paint и рисовать там, а не в конструкторе.
waleri вне форума Ответить с цитированием
Старый 27.04.2015, 03:15   #3
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Спасибо, подправил немного конструкцию элемента:

Код:
	private:
		TBitmap *ImageBox;
	public:
		__fastcall TMyPanel(TComponent *Owner, TForm *Form, TBitmap *img);
Код:
void __fastcall TMyPanel::Paint()
{
	// прорисовка TPanel
	/*
	...
	*/

	//перерисовываем рисунок на TPanel
	this->Canvas->Draw(0,0, this->ImageBox);
}

Код:
	Graphics::TBitmap *ptBmp;
	ptBmp=new Graphics::TBitmap;
	this->ImageList1->GetBitmap(0, ptBmp);
	TMyPanel *Pnl= new TMyPanel(this, Form1, ptBmp);
Но в этой конструкции 2 минуса:
- не знаю, каким образом можно промасштабировать изображение на новом TPanel ( т.е. если в ImageList1 закинуть через чур большое изображение, то оно не особо будет смотреть и не всё влезать на новый TPanel )
- PNG рисунок подгружается с черным фоном ...
-Jack- вне форума Ответить с цитированием
Старый 27.04.2015, 13:44   #4
Krok27
Форумчанин
 
Аватар для Krok27
 
Регистрация: 08.07.2010
Сообщений: 505
По умолчанию

Цитата:
не знаю, каким образом можно промасштабировать изображение на новом TPanel
Средствами WinAPI, какой-нибудь SetDIBits функцией, а потом выводить на панель.
Цитата:
на новый TPanel
Что мешает сделать агрегированый компонент: на TPanel положить Timage, на всю панель, обозвать его TMyPanel и рисовать в уже на TImage?
Знающий не говорит, говорящий не знает (С) Лао Цзы
Krok27 вне форума Ответить с цитированием
Старый 28.04.2015, 15:55   #5
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Да масштабирование не самая главная задача ... можно сделать ограничение и просто отслеживать размеры картинок ...
Больше смущает то, что фон не прозрачный
-Jack- вне форума Ответить с цитированием
Старый 28.04.2015, 17:39   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

http://docs.embarcadero.com/products...@TGraphic.html

Читаем про opacity
waleri вне форума Ответить с цитированием
Старый 29.04.2015, 00:35   #7
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
А причем тут opacity, если нужно чтобы только фон прозрачным был, а не всё изображение ?
-Jack- вне форума Ответить с цитированием
Старый 29.04.2015, 06:13   #8
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от -Jack- Посмотреть сообщение
- PNG рисунок подгружается с черным фоном ...
хорошо, я спрошу по другому - каким, по вашему, должен быть фон у PNG рисунка...
waleri вне форума Ответить с цитированием
Старый 29.04.2015, 11:59   #9
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
хорошо, я спрошу по другому - каким, по вашему, должен быть фон у PNG рисунка...
Если разглагольствовать по поводу прозрачности ... прозрачность в png задается при помощи альфа канала ...

Если говорить о "прозрачном фоне" ... То он в любом случаи будет какого либо цвета ... А его прозрачность будет задаться альфа каналом
-Jack- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузить картинку в Timage Алексей_2012 Общие вопросы Delphi 8 09.05.2014 17:53
Макрос из буфера обмена сохраняет картинку в папку, а саму картинку показывает в ексель mergin07 Microsoft Office Excel 10 23.04.2014 07:55
Накладывать картинку на картинку любой формы back191 HTML и CSS 0 25.08.2012 19:36
Контeйнер TImage наподобие TPanel diamond82 Компоненты Delphi 4 05.07.2010 01:25
Как получить картинку при наведении на другую картинку (ссылку) seeker1 JavaScript, Ajax 8 04.07.2010 19:42