Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1317960201
Smile
2011-10-07 08:03
2012.01.29
Anatoly Podgoretsky - с Юбилеем!


2-1319031742
Fr
2011-10-19 17:42
2012.01.29
группировка Items в TListView Delphi 7


1-1282631144
Avil
2010-08-24 10:25
2012.01.29
Разница кодировок при копировании и вставке


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


15-1318097571
Born Loser
2011-10-08 22:12
2012.01.29
Как передать данные из драйвера





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский