|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Работа с регионами
Есть некоторый Tbitmap. Необходимо скопировать из него некоторую часть (регион) и вставить на другой битмап.
Создаю регион: Код:
region:=CreatePolygonRgn(PtsArr, 4, WINDING); //PtsArr - массив нужных точек //Тут нужно как-то поместить кусок нужного битмапа в созданный регион. PaintRgn(bmp.Canvas.Handle, region); Вопрос, собственно, во втором комментарии. Заранее благодарен. |
#2
|
|||
|
|||
Могу быть не прав, но нельзя ли просто воспользоваться функцией BitBlt(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: Longint) ? Вроде должно подойти.
|
#3
|
||||
|
||||
Не прав, BitBlt даст прямоугольное копирование, если, конечно, ТС нужно что-нибудь типа окружности.
Имеется массив PtsArr (TPoint), который нужно предварительно заполнить координатами точек для создания замкнутой фигуры, а уж потом всё остальное. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#4
|
|||
|
|||
На самом деле, мне нужно прямоугольную область скопировать, повёрнутую на некоторый угол(наклонный прямоугольник). Можно, конечно, поворачивать битмап сначала в одну сторону, копировать прямоугольник, потом в другую, но это очень долго, т.к. Таких областей несколько + тот битмап, с которого копирую, достаточно большой.
Посчитать координаты точек то не проблема: в PtsArr четыре нужные точки уже посчитаны) |
#5
|
||||
|
||||
Если тебе нужно копировать повернутый "кусок", то простым "взмахом" повернутого региона у тебя не получится.
Я бы поступил так (если "куски" повернуты на разные углы): 1. Создать битмап (прямоугольник) нужного размера. 2. Скопировать на него BitBlt-ом нужный участок 3. Копировать на подложку попиксельно (ScanLine) скопированный участок. А можно и вообще без временного буфера - сразу из одного копировать в другой нужный участок с поворотом. Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#6
|
||||
|
||||
Цитата:
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
Цитата:
В CreatePolygon последняя точка соединяется с первой => 4 точки. Думаю на счет такого варианта (т.к. самый очевидный вариант с полигоном, похоже, слабо реализуем): 1) повернуть исходный битмап на угол -альфа (конечно, только небольшой кусок, куда все влезает) 2) скопировать прямоугольник нужный оттуда 3) повернуть обратно на альфа 4) вставить в нужный битмап Последний раз редактировалось MrBadge, 18.10.2012 в 15:09. |
#8
|
||||
|
||||
Ещё вариант вращения.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |