Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Canvas, Image   Найти похожие ветки 

 
!_SM_!   (2006-07-05 22:37) [0]

Здраствуйте! Подскажите пожалуйста как реализовать вывод графики слоями
т.е. есть форма на ней два Имиджа. Первый растянут по всей форме и в него загружена картинка. Второй поверх первого, изначально ничего в нем нет. Вопрос как рисовать на канве второго так чтобы рисунок первого под ним просматривался. Делаю так (код ниже)
второй имидж закрашивается белым и на нем рисуется то че надо. Как зделать что-бы на нем рисовалось то че надо, а белым он не закрашивался?
Очищаю рисунок вот так - 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;

Спасибо.


 
PSPF2003 ©   (2006-07-05 22:56) [1]

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


 
PSPF2003 ©   (2006-07-05 22:57) [2]

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


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


> 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 - второй (верхний) имидж


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

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


 
PSPF2003 ©   (2006-07-06 09:16) [5]

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


 
Ketmar ©   (2006-07-06 09:53) [6]

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


 
PSPF2003 ©   (2006-07-06 10:18) [7]


> снова пошлю

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


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

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


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

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


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

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

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


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;


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

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

может updatelayeredwindow() ? :)


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


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

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


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

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


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


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

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


 
antonn ©   (2006-07-06 14:08) [15]

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


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.029 c
15-1151407839
DevilDevil
2006-06-27 15:30
2006.07.30
Скиньте Плиз Стандартный OpenGL.pas


2-1152324813
antoxa2005
2006-07-08 06:13
2006.07.30
Что это:подключение не установлено т.к. конечный компьютер отверг


2-1152711054
dera
2006-07-12 17:30
2006.07.30
Как уменьшить шаг между точками на форме?


1-1150488885
guard_gg
2006-06-17 00:14
2006.07.30
Как реализовать динамический буффер в BlockRead?


3-1148841228
Still Swamp
2006-05-28 22:33
2006.07.30
Требуется локальная DB