Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.018 c
15-1151557954
DelphiN!
2006-06-29 09:12
2006.07.30
Получение номера с пластиковой карты через PC/2 CardReader


15-1151395130
Dush
2006-06-27 11:58
2006.07.30
Стоимость программы


15-1151778718
SergP
2006-07-01 22:31
2006.07.30
test


1-1150780080
denmin
2006-06-20 09:08
2006.07.30
Не могу округлить значение поля в EXCEL.


3-1148547033
apl
2006-05-25 12:50
2006.07.30
Как ускорить работу?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский