Форум: "Начинающим";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];
ВнизКак нарисовать на канве картинку, скруглив у неё края Найти похожие ветки
← →
igorium © (2011-10-16 18:13) [0]Всем привет.
Есть Form1.Canvas.
Есть Image1.
Задача скопировать Image1 на канву формы, предварительно скруглив у Image края. Причем не все, а только 2 левых (верхний и нижний).
Я нашел как скруглить все четыре края у Панели:
Zakrug_Panel := CreateRoundRectRgn(0, 0, Panel_First.Width, Panel_First.Height, Zakrug_Koef, Zakrug_Koef); // закругление углов панелей
SetWindowRgn(Panel_First.Handle, Zakrug_Panel, FALSE);
DeleteObject(Zakrug_Panel); // если регион для закругления больше не нужен, то он освобождается
Но для Image это не применимо...
Как обойти напасть?
← →
DVM © (2011-10-16 18:20) [1]А почему бы просто в графическом редакторе не скруглить края изображения, сделав углы прозрачными?
← →
Игорь Шевченко © (2011-10-16 18:22) [2]
> Задача скопировать Image1 на канву формы, предварительно
> скруглив у Image края. Причем не все, а только 2 левых (верхний
> и нижний).
SelectClipRgn
← →
igorium © (2011-10-17 12:35) [3]
> DVM © (16.10.11 18:20) [1]
> А почему бы просто в графическом редакторе не скруглить
> края изображения, сделав углы прозрачными?
Потому, что изображение выбирает пользователь.
Причем это будет личная фотография.
И таких изображений у меня будет несколько десятков.
> Игорь Шевченко © (16.10.11 18:22) [2]
> SelectClipRgn
БОЛЬШОЕ СПАСИБО
Все работает.
Вопрос в догонку - у меня не получается обнулить область региона в Bitmap:
tempBMP := TBitmap.Create;
tempBMP.Width := Im_First.Width - 1;
tempBMP.Height := Im_First.Height - 1;
rgn := CreateRoundRectRgn(0, 0, tempBMP.Width, tempBMP.Height, Zakrug_Koef, Zakrug_Koef);
SelectClipRgn(tempBMP.Canvas.Handle, Rgn);
DeleteObject(rgn);
SelectClipRgn(tempBMP.Canvas.Handle, NULL); // ошибка !!!
Но в последней строчке компилятор пишет ошибку:
Could not convert variant of type (NULL) into type (Int64)
Это не смертельно - просто из-за этого приходится заново удалять и заново создавать Bitmap.
← →
Плохиш © (2011-10-17 12:57) [4]Вместо NULL написать 0.
← →
igorium © (2011-10-17 20:12) [5]Не помогло :(
Пишет "Priveleged Instruction"
← →
трам-тарам (2011-10-17 20:25) [6]а nil ?
← →
igorium © (2011-10-18 08:44) [7]
> трам-тарам (17.10.11 20:25) [6]
> а nil ?
Компилятор не пропускает: "не соответствие типов HRGN и Pointer"
← →
MBo © (2011-10-18 09:30) [8]Писать нужно всё-таки 0
А уничтожение еще задействованного объекта региона - нездоровая логика.
← →
Игорь Шевченко © (2011-10-18 20:41) [9]
> А уничтожение еще задействованного объекта региона - нездоровая
> логика.
в данном случае нормальная логика
"Only a copy of the selected region is used. The region itself can be selected for any number of other device contexts or it can be deleted."
http://msdn.microsoft.com/en-us/library/dd162955(v=vs.85).aspx
← →
MBo © (2011-10-19 05:46) [10]>"Only a copy of the selected region is used. The region itself can be selected for any number of other device contexts or it can be deleted."
Оба-на!
Виноват (тем более, что с этим уже сталкивался).
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c