Форум: "WinAPI";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];
ВнизСкопировать регион Найти похожие ветки
← →
RUNaum © (2006-05-18 09:36) [0]Как можно скопировать регион (круг к примеру или любая другая форма) с канвы одного компонента на канву другого, при этом чтобы, понятное дело, под кругом осталась ранее видимая область.
← →
MBo © (2006-05-18 09:57) [1]>при этом чтобы, понятное дело, под кругом осталась ранее видимая область.
Вот это дело не вполне понятное ;)
← →
RUNaum © (2006-05-18 10:47) [2]Плохо пояснил ) Прошу прощение.
Давайте разберем на примере. Есть "панель", на ее канве (по всей панели) что-то отрисовано. Есть другая "панель", с канвы которой нужно скопировать круг на первую, расположив его в центре и чтобы не затерлось то что виднеется за пределами круга.
Вроде лучше.
← →
MBo © (2006-05-18 12:36) [3]В приемном контексте установить SelectClipRgn (круглый по нужным размерам CreateEllipticRgn)
← →
RUNaum © (2006-05-18 12:55) [4]Угу, понял.
Вопросец еще. Может так проще будет:
Можно ли придать панели круглую форму? Т.е. есть некая подложка, на ней висит круглая "панель", на канве которой отрисовывается полноценно изображение по размеру описывающего круг прямоугольника, но за счет того что сама панель задана регионом (кругом) излишки "обрезаются".
Прошу подтоклнуть на мысль... В WinAPI не силен (
Я прошу прощение за формулировку, не знаю как проще пояснить ) но думаю более менее понятно.
← →
wal © (2006-05-18 13:00) [5]
> [4] RUNaum © (18.05.06 12:55)
SetWindowRgn
← →
RUNaum © (2006-05-18 13:13) [6]wal © (18.05.06 13:00) [5]
Огромное спасибо вам и MBo, все получилось!
← →
parovoZZ © (2006-05-18 21:09) [7]Что самое дерьмовое, регион нельзя запомнить. :)
← →
Игорь Шевченко © (2006-05-18 21:12) [8]
> Что самое дерьмовое, регион нельзя запомнить. :)
Создаешь регион, копируешь нужный туда CombineRgn или CopyRgn и запоминаешь. Проблем нету. Заодно и выражения выбираешь при отправке постов.
← →
parovoZZ © (2006-05-18 23:08) [9]Да ну. У меня есть 10 картинок. Создаю CombineRgn столько же регионов (допустим, в массиве). Но как только делаю SetWindowRgn предыдущий регион уходит в небытие.
← →
MBo © (2006-05-19 06:48) [10]>регион нельзя запомнить
GetRgnData
ExtCreateRgn
← →
parovoZZ © (2006-05-20 21:00) [11]Хм, будем попробовать
← →
parovoZZ © (2006-05-27 23:12) [12]Ну вообщем я ленивый, поэтому объясню ситуацию.
У меня есть скринмэйт, который активно машет крыльями. Первое, что приходит в голову, это при вызове следующей картинки обрабатывать её и вырезать регионом всё лишнее. Просто, но очень сильно загружает процессор. Второе, что приходит на ум - это создать массив и туда залить все регионы для всех картинок. НО! При последующем вызове региона из массива мы получаем всё, что угодно, но только не регион. Я пошёл по другому пути. В результате нагрузка процессора не более 10 %, без обработки картинки, но вызываем каждый раз CombineRgn. А вот GetRgnData и ExtCreateRgn действительно позволяют решить задачу?
← →
parovoZZ © (2006-05-27 23:37) [13]Попробовал...
В result готовый регион:
function CreateRgn (index : byte) : HRGN;
var
x : integer;
Rgn : HRGN;
RgnDt : RGNDATA;
form : xForm;
begin
result := CreateRectRgn (0, 0, Width, Height);
....
//Пара строчек по созданию региона на основе картинки
GetRegionData (result, SizeOf (RgnDT), @RgnDt);
result := ExtCreateRegion (@form, SizeOf (RgnDt), RgnDt)
end;
На выходе имеем 0.
← →
antonn © (2006-05-28 07:18) [14]parovoZZ © (27.05.06 23:37) [13]
//Пара строчек по созданию региона на основе картинки
и там, видимо, через canvas.pixels[] работа идет... мой телепатор прав?
← →
parovoZZ © (2006-05-28 11:45) [15]
> и там, видимо, через canvas.pixels[] работа идет... мой
> телепатор прав?
НЕТ. Там всё идёт через HDC. Так как я обожаю WinApi, то собственно ни о каких канвасах речи и быть не может. Мой скринмэйт вместе с картинками весит 40 кило.
Меня смущает последний параметр ExtCreateRegion - просят константу. А у меня там переменная. Хотя в справке написано, что ExtCreateRegion работает совместно с GetRegionData. И что за структура XFORM? Попробовал подставить nil - результат тоже нулевой. Вроде в RGNDT что-то пишется, но не изымается.
Может есть у кого рабочий примерчик?
← →
MBo © (2006-05-29 08:21) [16]>parovoZZ
Мой пост с ExtCreateRgn относится к долговременному сохранению региона(например, на винт)
Для временного хранения достаточно того, что Игорь посоветовал
← →
parovoZZ © (2006-05-29 19:46) [17]Так а в память его можно "записать"? У меня что-то не получилось. Да и в справке написано, что регион можно вызвать не более одного раза.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.046 c