Форум: "Начинающим";
Текущий архив: 2006.04.16;
Скачать: [xml.tar.bz2];
ВнизОбъясните пожалуйста как пользоваться 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c