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

Вниз

Объясните пожалуйста как пользоваться scanline и region?   Найти похожие ветки 

 
MVP   (2006-04-02 14:22) [0]

Допустим scanline форму и все черные пикселы в ней поменять  на белые?

А так же как пользоваться region?
CreateEllipticRgn, CombineRgn, OffsetRgn, PaintRgn и т.п.?
Применение:
1. Создаем эллипт. регион, отрезаем с помощью combine линшнее,
повторяем скока надо.
2. Объединяем с помощью combine.
3. Оффсетом на 1 делаем восемь регионов - выше/ниже, правее/левее, комбинация. Объединяем.
4. Из п.3 вырезаем п.2.
5. Рисуем п.4.

CreateEllipticRgn - задаю его, а он не отображается на форме. Я не знаю как его правильно применить.


 
MBo ©   (2006-04-02 14:35) [1]

в справке Region Functions  есть несколько функций для рисования регионов


 
MVP   (2006-04-02 15:13) [2]

var
Bit : TBitmap;
Rgn:Cardinal;
begin
Bit := TBitmap.Create;
Bit.Width := 300;
Bit.Height := 300;
Bit.Canvas.Brush.Color := clRed;
Bit.Canvas.Pen.Color := clRed;
Rgn := CreateEllipticRgn (100, 100, 200, 200);
FillRgn(Bit.Canvas.Handle, rgn, Bit.Canvas.Brush.Handle);
Bit.Free;

вот пишу, что тут неправильно, регион не прорисовывается

и со сканлайном, помогите плиз


 
Джо ©   (2006-04-02 15:17) [3]

> вот пишу, что тут неправильно, регион не прорисовывается

А на чем он должен прорисовываться? В приведенном коде все рисуется на изображении "в памяти", визуального отображения нет.


 
MVP   (2006-04-02 15:24) [4]

ааа, а мне надо на канву


 
MVP   (2006-04-02 15:32) [5]

Ну в смысле чтоб отображалось на форме


 
Джо ©   (2006-04-02 15:39) [6]

> [5] MVP   (02.04.06 15:32)
> Ну в смысле чтоб отображалось на форме

Рисуй на канве формы в обработчике события OnPaint.


 
MVP   (2006-04-02 15:43) [7]

а объясни как, я не пойму, что битмап убрать и рисовать в ОнПаинт на канве формы?
И ещё, со сканлайнами не поможешь?
Допустим scanline форму и все черные пикселы в ней поменять  на белые?


 
MVP   (2006-04-02 15:49) [8]

Просто я уже писал, мне нужны контура пересекающихся фигур.
Я использую так
if Pixels = цвет такой-то then Pixels := цвет такой-то

Выходит очень долго, и ещё зависит от частоты проца, мне посоветовали сделать или регионами или сканлайном. Но как пользоваться или тем или тем я не понимаю. Объясните пожалуйста.


 
MVP   (2006-04-02 15:53) [9]


> Рисуй на канве формы в обработчике события OnPaint

А на Битмап никак нельзя?


 
MVP   (2006-04-02 16:58) [10]

var
Rgn : array [1..12] of Cardinal;
begin
Canvas.Brush.Color := clRed;
Canvas.Pen.Color := clRed;
Rgn[1] := CreateEllipticRgn (100, 100, 200, 200);
Rgn[2] := CreaterectRgn (50, 50, 150, 150);
CombineRgn (Rgn[1], Rgn[1], Rgn[2], RGN_AND);
Rgn[3] := Rgn[1];
OffsetRgn(Rgn[3], 100, 100);
PaintRgn(Canvas.Handle, rgn[1]);


С помощью ОффСета, хочу получить копию Rgn[1], только смещенную на 100, 100. При выводе как Rgn[1] так и Rgn[3], получаются смещенными на 100, 100. Что неверно?


 
MBo ©   (2006-04-02 17:03) [11]

>Что неверно?
Это один и тот же регион.
Копию можно создать через CombineRGN c RGN_COPY


 
EvS ©   (2006-04-02 17:06) [12]

Что неверно?

Rgn[3] := Rgn[1];


 
antonn ©   (2006-04-02 17:22) [13]

MVP   (02.04.06 14:22)
Допустим scanline форму и все черные пикселы в ней поменять  на белые?

сканлайн только у TBitmap
http://kladovka.net.ru/index.cgi?pid=list&rid=252 (там нет комментов, только код)


 
MVP   (2006-04-02 17:32) [14]

var
Rgn : array [1..12] of Cardinal;
begin
with Image1 do
Canvas.Brush.Color := clRed;
Canvas.Pen.Color := clRed;
Rgn[1] := CreateEllipticRgn (100, 100, 200, 200);
Rgn[2] := CreaterectRgn (50, 50, 150, 150);
Rgn[3] := CreaterectRgn (50, 50, 150, 150);
Rgn[4] := CreaterectRgn (50, 50, 150, 150);
Rgn[5] := CreaterectRgn (50, 50, 150, 150);
Rgn[6] := CreaterectRgn (50, 50, 150, 150);
CombineRgn (Rgn[2], Rgn[1], Rgn[2], RGN_AND);
CombineRgn (Rgn[3], Rgn[1], Rgn[3], RGN_AND);
CombineRgn (Rgn[4], Rgn[1], Rgn[4], RGN_AND);
CombineRgn (Rgn[5], Rgn[1], Rgn[5], RGN_AND);
CombineRgn (Rgn[6], Rgn[1], Rgn[6], RGN_AND);
//CombineRgn (Rgn[1], Rgn[1], Rgn[2], RGN_AND);
OffsetRgn(Rgn[3], 1, 0);
OffsetRgn(Rgn[4], 0, 1);
OffsetRgn(Rgn[5], -1, 0);
OffsetRgn(Rgn[6], 0, -1);
//CombineRgn (Rgn[3], Rgn[1], Rgn[3], RGN_XOR);
CombineRgn (Rgn[3], Rgn[2], Rgn[3], RGN_XOR);
CombineRgn (Rgn[4], Rgn[2], Rgn[4], RGN_XOR);
CombineRgn (Rgn[5], Rgn[2], Rgn[5], RGN_XOR);
CombineRgn (Rgn[6], Rgn[2], Rgn[6], RGN_XOR);
PaintRgn(Canvas.Handle, rgn[3]);
PaintRgn(Canvas.Handle, rgn[4]);
PaintRgn(Canvas.Handle, rgn[5]);
PaintRgn(Canvas.Handle, rgn[6]);

Простите, если я надоел. Но вот полученный сектор я XORом вывожу сверху на Image, и его цвет не красный, а типа как негатив какой-то. Как выводить чтоб было красная линия, а под ней прозрачный фон?


 
MVP   (2006-04-02 17:59) [15]

Ну в смысле Красными линиями сверху на рисунке



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

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

Наверх




Память: 0.5 MB
Время: 0.028 c
2-1143807186
Der Nechk@ssoff
2006-03-31 16:13
2006.04.16
Canvas


2-1143826232
FBI Agent
2006-03-31 21:30
2006.04.16
Пароли и *.ini


15-1143032261
Физик
2006-03-22 15:57
2006.04.16
На етом форуме можна зделать штобы ответы приходили на mail


2-1143564528
dubolom
2006-03-28 20:48
2006.04.16
Работа с большими числами


2-1143861647
Я туплю....
2006-04-01 07:20
2006.04.16
CITRIX