Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.027 c
15-1163538319
i-s-v
2006-11-15 00:05
2006.12.03
Вода на марсе может быть!!


2-1163698977
breeze
2006-11-16 20:42
2006.12.03
thread.terminate


2-1163666014
WhiteBarin
2006-11-16 11:33
2006.12.03
Запретить завершение сеанса,запрещение выключения компьютера...


3-1159353030
Anto}{a
2006-09-27 14:30
2006.12.03
запись в ячейки EditDBEdit


3-1159550644
Kley
2006-09-29 21:24
2006.12.03
Exel&Delphi




   Наверх