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

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

Canvas, Image [D7, XP]


!_SM_! ©   (2006-07-05 22:37:00) 

Здраствуйте! Подскажите пожалуйста как реализовать вывод графики слоями
т.е. есть форма на ней два Имиджа. Первый растянут по всей форме и в него загружена картинка. Второй поверх первого, изначально ничего в нем нет. Вопрос как рисовать на канве второго так чтобы рисунок первого под ним просматривался. Делаю так (код ниже)
второй имидж закрашивается белым и на нем рисуется то че надо. Как зделать что-бы на нем рисовалось то че надо, а белым он не закрашивался?
Очищаю рисунок вот так - Imige2.Picture.Graphic:=nil;
Да и между первым и вторым Image может еще находится чего нибудь будь то еще имидж или Label с Transporent=True; Второй Имидж самый верхний всегда и на нем нужно что-то рисовать не порча всю нижнюю картину.

procedure TForm1.Button4Click(Sender: TObject);
var BMP: TBitMap;
begin
 BMP:=TBitMap.Create;
 BMP.Width:=Im.Width; BMP.Height:=Im.Height;
 //BMP.Transparent:=True;
 BMP.Canvas.Brush.Style:=bsClear;
 BMP.Canvas.Rectangle(10, 10, 100, 100);
 Im.Canvas.Draw(0, 0, BMP);
 Im.Canvas.LineTo(100,150);
 BMP.Free;
end;

Спасибо.


Ketmar   (2006-07-06 15:17:00) [1]

>antonn ©   (06.07.06 11:55) [11]
да. это было в комплекте упоминаний. я пол-дня плакал: столько лет ругать microsoft -- и зря! %-)


!_SM_!   (2006-07-06 14:22:00) [2]

Скачал. Дома посмотрю. Спасибо.


antonn   (2006-07-06 14:08:00) [3]

она АПИ, примерчик: http://kladovka.net.ru/index.cgi?pid=list&rid=318


!_SM_!   (2006-07-06 14:02:00) [4]


> antonn ©   (06.07.06 13:39) [13]

Спасибо. Посмотрю. А она стандартная, API или какая?
Приду домой посмотрю


antonn   (2006-07-06 13:39:00) [5]

!_SM_!   (06.07.06 12:11) [12]
да есть такая сумасшедшая функция, подменяет "изображение" формы на изображение подсунутого битмапа, без мерцаний, с альфаканалом, с прозрачностью и полупрозрачностью. Но редкая в плане упоминания.


!_SM_!   (2006-07-06 12:11:00) [6]


> antonn ©   (06.07.06 11:55) [11]

Извени непонимаю о чем речь....


antonn   (2006-07-06 11:55:00) [7]

Ketmar ©   (06.07.06 10:37) [8]
хе. могу и ещё дальше. а AlphaBlend() -- это вообще моя больная тема. столько лет не знать о ней... вот теперь всех туда и посылаю. %-)

может updatelayeredwindow() ? :)


!_SM_!   (2006-07-06 11:41:00) [8]

Спасибо всем.

Решил проблему так


pro... ButtonClick;
begin
 Image2.Picture.Bitmap.TransporentColor:=clWhile;
 Image2.Picture.Bitmap.Transporent:=True;
 Image2.Canvas.FillRect(Image2.Canvas.ClipRect);
{Здесь рисуем что хотим
будет прозрачно по отношению
нижнего фона}
 Image2.Canvas.LineTo(50, 150);
 Image2.Canvas.Rectangle(10, 10, 300, 300);
 Image2.Canvas.TextOut(20, 150, 'Это просто пример');
end;
//стираю так
pro... ButtonClearClick;
begin
 Imige2.Picture.Graphic:=nil;
end;


PSPF2003   (2006-07-06 10:42:00) [9]

Ндааа это уже диагноз :) Лечение не помогает? Не знаю там, пол стакана Transparent-а на бутылку Stretch-а… :)))


Ketmar   (2006-07-06 10:37:00) [10]

хе. могу и ещё дальше. а AlphaBlend() -- это вообще моя больная тема. столько лет не знать о ней... вот теперь всех туда и посылаю. %-)


PSPF2003   (2006-07-06 10:18:00) [11]


> снова пошлю

Только б посылали :)


Ketmar   (2006-07-06 09:53:00) [12]

а я снова пошлю в сторону AlphaBlend(). %-) или Graphics32.


PSPF2003   (2006-07-06 09:16:00) [13]

В Делфи нету слоев. Хотя возможно в GDI+ есть необходимые тебе возможности, двигайся в данном направлении. Могу порекомендовать книгу Программирование WIN32 API в Delphi авторы Дмитрий Кузан, Владимир Шапонов. В ней целый раздел посвешен графике в Делфи.


!_SM_!   (2006-07-06 00:56:00) [14]

Как реализованы слои в фотожопе?
С прозрачной основой...
Вот типа че нибудь похожее надо.....


!_SM_!   (2006-07-06 00:54:00) [15]


> PSPF2003 ©   (05.07.06 22:57) [2]

ну а если там

> Да и между первым и вторым Image может еще находится чего
> нибудь будь то еще имидж или Label с Transporent=True; Второй
> Имидж самый верхний всегда и на нем нужно что-то рисовать
> не порча всю нижнюю картину.

11111111111111111111111111111111111111111111111111111111
1                                                                                       1
1                                                                                       1
1                                                                                       1
1                                 2222222222222222222222222222         1
1                                 2                                          2         1
1                             LLL2LLLL                                    2         1
1                             LLL2LLLL                                    2         1
1                                 2                                          2         1
1                                 2                                          2         1
1                            EEE2EEEEEEEEE                            2         1
1                            EEE2EEEEEEEEE                            2         1
1                                 2                                          2         1
1                                 2222222222222222222222222222          1
111111111111111111111111111111111111111111111111111111111

нарисовано:
1 - первый (нижний) имидж
L - Label между первым и вторым имиджами
E - Edit так же как и Label лежит
2 - второй (верхний) имидж


PSPF2003   (2006-07-05 22:57:00) [16]

Область копируется CopyRect


PSPF2003   (2006-07-05 22:56:00) [17]

Сначала скопируй область во второй Image а потом рисуй на нем.


Наверх

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