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