Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.29;
Скачать: CL | DM;

Вниз

Как нарисовать на канве картинку, скруглив у неё края   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.01 c
2-1318857607
Бездомный
2011-10-17 17:20
2012.01.29
Клонировать компонент в runtime.


15-1318195803
Юрий
2011-10-10 01:30
2012.01.29
С днем рождения ! 10 октября 2011 понедельник


2-1318866159
Gu
2011-10-17 19:42
2012.01.29
Установка VersionInfo


2-1318848285
pest
2011-10-17 14:44
2012.01.29
конфликт двух DLL при совместном использовании


3-1270789890
12
2010-04-09 09:11
2012.01.29
Запрос работает из Management Studio. Из программы нет.