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

Вниз

Уменьшенная копия региона   Найти похожие ветки 

 
Дмитрий_05   (2005-09-11 17:28) [0]

У меня есть регион, как бы мне сделать уменьшенную его копию? Например на 20 пикселей меньше по ширине и высоте... Разбирался с ExtCreateRegion и XForm, что-то ничего не понял... Может ктонибудь подскажет?


 
Дмитрий_05   (2005-09-11 20:42) [1]

???


 
Дмитрий_05   (2005-09-12 18:21) [2]

У меня регион произвольной формы, т.е. ето не эллипс, не круг и т.д. Есть ли функция которая берет этот регион и немного уменьшает?


 
Джо ©   (2005-09-12 18:40) [3]

Так ты все еще не разобрался с XForm? В MSDN вроде все хорошо описано.
Ну, вот маленький пример, чтобы начать (проверку ошибок делай сам):

procedure TForm6.Button1Click(Sender: TObject);
var
 Rgn1,Rgn2: HRGN;
 Sz: Cardinal;
 RgnData: PRgnData;
 XForm: TXForm;
begin
 Rgn1 := CreateEllipticRgn(0,0,100,150);
 Image1.Canvas.Brush.Color := clBlue;
 PaintRgn(Image1.Canvas.Handle,Rgn1);

 // get data size for store region data
 Sz := GetRegionData(Rgn1,0,nil);
 GetMem(RgnData,Sz);
 try
   // get actual data
   GetRegionData(Rgn1,Sz,RgnData);
   // масштабируем
   XForm.eM11 := 0.5;
   XForm.eM22 := 0.5;
   Rgn2 := ExtCreateRegion(@XForm,Sz,RgnData^);
   // малюем получившийся регион
   Image1.Canvas.Brush.Color := clRed;
   PaintRgn(Image1.Canvas.Handle,Rgn2);

 finally
   FreeMem (RgnData);
 end;

 DeleteObject(Rgn1);
 DeleteObject(Rgn2);
end;


Масштабируем первоначальный регион в 0.5 раз по горизонтали и 0.5 по вертикали (члены eM11, eM22 структуры XFORM отвечают за scaling). По остальным типам преобразования (вращение и т.п.) смотри описание структуры XFORM в MSDN, там в табличном виде все хорошо расписано.


 
Джо ©   (2005-09-12 18:44) [4]


> Разбирался с ExtCreateRegion и XForm, что-то ничего не понял...

А что именно не понял, если не секрет?


 
Дмитрий_05   (2005-09-12 19:05) [5]

на английском все... а в английском я не очень силен... а можно сделать регион не "в" 0.5, а "на" 20 меньше?


 
Джо ©   (2005-09-12 19:16) [6]


>  [5] Дмитрий_05   (12.09.05 19:05)
> а можно сделать регион не "в" 0.5, а "на" 20 меньше?

Смотря что иметь под этим в виду.

> на английском все... а в английском я не очень силен...

Эта, учи, брат. Думаю, что слова scaling, rotation, offset выучить не сложно. А вообще-то, по сабжу, тут все сводится к афинным преобразованиям. Посмотри курс геометрии.


 
Дмитрий_05   (2005-09-12 19:22) [7]

размер )))


 
Дмитрий_05   (2005-09-12 19:22) [8]

высоту и ширину на 20 уменьшить )))


 
Джо ©   (2005-09-12 19:24) [9]

Тут тогда нужно определиться, что имееть в виду под "шириной и высотой" произвольного региона. Ширина и высота она, как-никак у прямоуголников только бывает.


 
Джо ©   (2005-09-12 19:27) [10]

Если иметь в виду ширину и высоту описывающего прямоугольника, то начинай "плясать" от функции GetRgnBox.


 
Дмитрий_05   (2005-09-12 23:37) [11]

Что-то не получается "плясать" ))) Функцией GetRgnBox мы узнаем прямоугольник описывающий регион, грубо говоря высоту и ширину... Я их и так знал... А как уменьшить высоту и ширину? Какойнибудь SetRgnBox функции я ненашел...


 
Джо ©   (2005-09-13 01:20) [12]


>  [11] Дмитрий_05   (12.09.05 23:37)

Как уменьшить регион в N раз, я написал в [3]. Вы, надеюсь, 3 класс школы закончили? ;) Ибо далее следуют сложнейшие математические выкладки, которые может понять только 4-классник:

X + M,
X - первоначальное значение,
M - число, на которое увеличивается X

мы должны найти некое N, удовлетворяющее условию
X*N = X+M.

Несложно увидеть, что
N = (X+M)/X.

Нужно, например, отрезок в 100 пикселей увеличить на 10 пикселей. Это будет то же самое, что отрезок в 100 пикселей увеличить в 1.1 раза((100+10)/100). Следовательно, следует подставить этот коэффициент в соответствующие поля структуры XFORM, отвечающие за scaling.
Не может быть, чтобы это было настолько сложно для понимания.


 
Дмитрий_05   (2005-09-13 05:46) [13]

Джо спасибо! ))) Я хотел так сделать, но почему-то думал что есть другой способ...)))



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

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

Наверх




Память: 0.49 MB
Время: 0.049 c
1-1126172991
ashnurov
2005-09-08 13:49
2005.10.02
XComDrv


8-1115847880
st.andrew
2005-05-12 01:44
2005.10.02
AVI=>BMP


1-1126437466
Igor_thief
2005-09-11 15:17
2005.10.02
RAVE reports


2-1124705566
goodroman
2005-08-22 14:12
2005.10.02
Как создать папку на делфи?


14-1126038981
syte_ser78
2005-09-07 00:36
2005.10.02
глюк nokia 3410