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

Вниз

копирование участка изображения   Найти похожие ветки 

 
PHPDeveloper   (2006-11-12 19:25) [0]

Есть массив, в массиве координаты точек некоторой области на изображении, каким образом можно скопировать данный участок из данного изображения, в другое изображение. Речь идет о BitMap"ах


 
Percent   (2006-11-12 22:22) [1]

Проходишь по массиву в цикле, и для каждого заданной прямоугольной области выполняешь TCanvas.CopyRect


 
Степан   (2006-11-12 23:12) [2]

Помоему Percent немного не так понял вопрос PHPDeveloper"а...

Насколько я понял, из данного массива точек необходимо создать регион с помощью функции CreatePolygonRgn, после чего залить этот регион кистью, в качестве основного цвета которого используется сам битмап...

var
 Points: array [0..4] of TPoint;
 Rgn: HRGN;
 ...
begin
 ...
 Rgn := CreatePolyRgn(Points, 5, ALTERNATE);
 Canvas.Brush.Bitmap := SrcBitmap;
 FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle);
 ...
end;

При необходимости, можно сместить регион с помощью функции OffsetRgn.


 
PHPDeveloper   (2006-11-12 23:28) [3]

Есть 2 изображения (TImage к примеру).
Мне нужно скопировать область из 1го TImage
(к примеру с координатами:
pts[0] := Point(0, 0);
pts[1] := Point(5, 2);
pts[2] := Point(2, 5);
pts[3] := Point(0, 0);
)
и вставить это кусочек в TImage2 с такими же координатами.


 
KilkennyCat ©   (2006-11-12 23:34) [4]

вычисление точек, принадлежащих внутре замкнутой кривой ... а в данном случае, треугольнику, находится легко и просто, руководствуясь школьными знаниями или кучей алгоритмов в сети лежащих..


 
PHPDeveloper   (2006-11-12 23:35) [5]

Хотя мне подойдет вариант Степана, но есть некоторые трудности


bm1:=TBitmap.Create;
bm2:=TBitmap.Create;

bm1.Assign(Image1.Picture.Bitmap);
bm2.Assign(Image2.Picture.Bitmap);

SetLength(pts, 4);
pts[0] := Point(0, 0);
pts[1] := Point(50, 20);
pts[2] := Point(20, 50);
pts[3] := pts[0];

Rgn := CreatePolygonRgn(pts, 3, ALTERNATE);
bm2.canvas.Brush.Bitmap := bm1;

FillRgn(bm2.canvas.Handle, Rgn, bm2.Canvas.Brush.Handle);

image2.Picture.Bitmap.Assign(bm2);



Правильно ли я делаю? Кто подскажет на ошибки?


 
PHPDeveloper   (2006-11-12 23:57) [6]


 Points:array [1..10,1..2] of integer;
begin

points[1,1]:=0;
points[1,2]:=0;

points[2,1]:=100;
points[2,2]:=0;

points[3,1]:=20;
points[3,2]:=100;

Rgn := CreatePolygonRgn(points, 3, Winding);

Так работает, так в чем же причина предыдущего кода?


 
Percent   (2006-11-13 03:05) [7]

так в чем же причина предыдущего кода?

Ты.
Угадал?



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

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

Наверх




Память: 0.48 MB
Время: 0.054 c
2-1163581261
pavel_guzhanov
2006-11-15 12:01
2006.12.03
Интересное поведение функции Length()


15-1163494454
ORMADA
2006-11-14 11:54
2006.12.03
Сообщество Delphi7 развивает свою версию delphi


6-1153064341
Route
2006-07-16 19:39
2006.12.03
IdIRC - dcc


2-1163355494
Greenchel
2006-11-12 21:18
2006.12.03
Отправка текста через интернет


2-1163427573
Darvin
2006-11-13 17:19
2006.12.03
Работа со StringGrid