Главная страница
    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.019 c
15-1151468479
Dimmmonn
2006-06-28 08:21
2006.07.30
нужны сэмплы!


15-1151576692
DelphiN!
2006-06-29 14:24
2006.07.30
Град размером с яблоко в Германии


15-1151432483
JUS
2006-06-27 22:21
2006.07.30
Модераторам


15-1151659362
Layner
2006-06-30 13:22
2006.07.30
Сервис сам останавливается в W2003R2, хотя в 2000 стабильно


2-1152523290
Darkwing
2006-07-10 13:21
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский