Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 00:26   #1
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию Существует ли компонент типа TImage, с возможностью изменять основание (прямоугольность) изображения?

Что-то типа TShape, только с возможностью выбора изображения.
К примеру в свойствах указываешь графический файл и форму (круг, овал, треугольник).
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 04.05.2009, 00:55   #2
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Можно например сделать TBitBtn с картинкой и применить к нему регионы...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 04.05.2009, 01:04   #3
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Цитата:
Сообщение от DomiNick Посмотреть сообщение
Можно например сделать TBitBtn с картинкой и применить к нему регионы...
Не пойдёт, свойств от Image там мало.
Я сейчас статейку читаю, где форму можно любой формы сделать (даже по контуру любого предмета на изображение - например). Но опять же теряются некоторые свойства TImage.
Также сейчас установлю TMS Instrumentation Workshop, может там чё полезное есть.
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 04.05.2009, 01:16   #4
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
Подмигивание

Цитата:
теряются некоторые свойства TImage
А какие нужны?)

Что за статьи?)
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Старый 04.05.2009, 11:27   #5
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Цитата:
DomiNick
А какие нужны?)
Transparent и BorderStyle=0;

Цитата:
DomiNick
Что за статьи?)
Вот она:
1.
Цитата:
Подготовка картинки.
Определение границы картинки

Выберите картинку и загрузите ее в PhotoShop. Чтобы получить при запуске программы на экране картинку неправильной формы (в PhotoShop она все равно прямоугольная) удобно "выделением" очертить смысловую часть картинки после этого все края "залить", например, белым цветом (если он не используется в смысловой части). Сохраните картинку в формате BMP.
Получение координат границы картинки

Для получения координат границ картинки удобно воспользоваться возможностями PhotoShop. Для этого надо выполнить всего две операции:

* превратить "выделение" смысловой части картинки в путь,
* экспортировать путь в Illustrator.

В результате получится файл с расширением ai и текстовым содержанием, такого типа:

Код:
 %!PS-Adobe-2.0
  %%Creator: Adobe Photoshop(TM) Pen Path Export 3.0
  %%Title: (predpr.ai)
  %%DocumentProcSets: Adobe_Illustrator_1.1 0 0
  %%ColorUsage: Black&White
  %%BoundingBox: 0 0 600 381
  %%HiResBoundingBox: 0 0 600 381
  %AI3_Cropmarks: 0 0 600 381
  %%DocumentPreview: None
  %%EndComments
  %%EndProlog
  %%BeginSetup
  Adobe_Illustrator_1.1 begin
  n
  %%EndSetup
  0.0 0.0 0.0 1.0 k
  0 i 0 J 0 j 1 w 4 M []0 d
  %%Note:
  260.9999 372 m
  335.0937 359.25 414.9062 367.1562 486.0624 352.25 c
  508.4687 347.5625 526.9374 341.4375 546.5937 332.5937 c
  556.4062 328.1875 567.4374 316 578.9999 316 C
  577.1249 301.625 582.6874 289.6875 582.9374 275 C
  583.1249 217.0312 583.3124 159.0312 583.4687 101.0625 C
  581.4374 79.875 571.2812 53.375 553.125 41.7812 C
  552.7499 41.1875 552.3749 40.5937 551.9999 40 C
  551.6562 38 551.3437 36 550.9999 34 C
  529.7187 29.2187 503.9062 31.7812 480.9999 29.9375 c
  465.9687 28.75 457.0624 17.0937 442.9374 15.4687 C
  402.2812 16.5312 361.6249 17.5937 320.9687 18.6875 C
  316.4062 18.6875 292.9999 18.8437 292.9999 15 C
  292.3437 16 291.6874 17 290.9999 18 C
  271.3437 11.875 246.5624 12 223.9999 12 C
  213.1249 21.3125 187.8124 25.4375 171.9687 25.9062 C
  169.6562 26.2812 167.3437 26.625 164.9999 27 C
  166.3437 27 167.6874 27 168.9999 27 C
  168.6562 27.6562 168.3437 28.3125 167.9999 29 C
  141.1874 39.7187 109.5937 41.4062 80.1562 46.75 C
  70.4374 49.5 60.7187 52.25 50.9999 55 C
  45.3437 63 39.6874 71 33.9999 79 C
  38.9062 92.1562 25.6562 108.5312 25.4374 124.0312 C
  25.6874 158.0312 25.9687 192 26.2187 226 C
  27.8124 234 29.4062 242 30.9999 250 C
  35.5937 257.6875 40.2187 265.375 44.8124 273.0625 C
  55.5937 283.5312 70.3749 289.3437 78.3437 303.3125 c
  86.0937 316.9687 86.8124 338.9062 96.1249 351.0312 c
  100.7499 357.0937 110.2187 361 117.9999 361 C
  140.1562 372.8437 176.9999 368 204.9999 368 C
  208.6562 368.3437 212.3437 368.6562 215.9999 369 C
  228.6562 369.3437 241.3437 369.6562 253.9999 370 C
  256.3437 370.6562 258.6874 371.3125 260.9999 372 C
  n
  %%Trailer
  %%EOF
В нем явно видны координаты в пикселях границы смысловой части картинки. Координаты идут парами X , Y. Они фактически готовы к подстановке в текст программы, а необходимые преобразования можно сделать уже в тексте программы.
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 04.05.2009, 11:28   #6
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Продолжение:
2.
Цитата:
Программирование в Delphi
Стандартная часть

Стандартная часть программирования подразумевает выполнение обычных операций:

* Создание Form'ы для картинки.
* Размещение на ней визуального элемента Timage
* Загрузка в элемент типа Timage подготовленной картинки (типа BMP)
* Установка свойства Timage Transparent в TRUE.

Задание границы Form'ы

Для точной настройки формы Form'ы надо загрузить координаты границы картинки из файла типа ai в программу, например, в виде массива констант:

Код:
implementation

{$R *.DFM}

type t_coord = array [1..272] of real;//число точек определяется вручную

const

ImgHeight : integer = 381; //высота катринки в пикселях

coord : t_coord =(260.9999, 372, //массив координат границы 
269.8749, 370.25,
280.4374, 371.5625,
289.9374, 370.625,
316.0624, 368.125,
341.8124, 366.8125,
369.9687, 365.9062,
408.9687, 364.6875,
448.0624, 359.3125,
484.9062, 352.5625,
507.5312, 348.4375,
527.0624, 341.6562, 

... - я выпустил часть координат для уменьшения объема статьи

95.6874, 351.3437,
100.7187, 357.5, 
109.6874, 361, 
117.9999, 361,
138.7187, 373.7812, 
178.0937, 368, 
204.9999, 368,
208.6562, 368.3437, 
212.3437, 368.6562, 
215.9999, 369,
223.9999, 368.875, 
231.9999, 368.7187, 
239.9999, 368.5937,
244.6562, 369.0625, 
249.3437, 369.5312, 
253.9999, 370,
256.3437, 370.6562, 
258.6874, 371.3125, 
260.9999, 372);
Настройка формы Form'ы

Настройка формы Form'ы связана с необходимостью округления до целого значения и пересчета заданных координат в систему отсчета Timage. У исходных координат ноль расположен в левой нижней части картинки, а у Timage - в левой верхней точке. Кроме того, основная цель - задать форму Form'ы, поэтому необходимо произвести пересчет координат относительно левой верхней точки элемента типа TForm. Все эти операции выполняются при создании Form'ы:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  P : array [0..134] of TPoint; //массив для задания формы
  i, imgX, imgY : integer;
  R : HRgn;
begin
  // координаты на форме объекта Image1
  imgX := Image1.Left;
  imgY := Image1.Top;

  // формирование массива точек для задания формы Form1
  for i := 0 to 134 do
    P[i] := Point(imgX + round(coord[i+i+1]),
  imgY + ImgHeight - round(coord[i+i+2]));

  R := CreatePolygonRgn(P, 135, WINDING); // создание полигона
  SetWindowRgn(Handle, R, True); //установка формы Form1
  Brush.Style:=bsClear; //прозрачность формы не помешает
end;
Формально это все, что касается основной темы статьи.
Замечания

Рассмотрен случай односвязанного пути. Вариант с несколькими путями реализуется аналогично с использованием метода CombineRgn.

Формально, для красоты работы примера я в код добавил еще

Код:
//Это в общем-то ненужная добавка для перетаскивания картинки по экрану
//добавлена вручную

procedure TForm1.WMNCHitTest(var M: TWMNCHitTest);
begin
  inherited; // вызов унаследованного обработчика
  if M.Result = htClient then // мышь сидит на окне? 
  M.Result := htCaption; // Если да, то пусть Windows думает, что мышь сидит на Caption 
end;

//Закрытие программы по щелчку мыши
procedure TForm1.Button1Click(Sender: TObject);
begin
 close;
end;
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 04.05.2009, 12:30   #7
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Можно и с обычным имиджем поизвращаться
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.Image1.Picture.LoadFromFile('d:\1.bmp');
form1.Image1.Canvas.Brush.Style:=bsclear;
form1.Image1.Canvas.Ellipse(1,1,image1.Width-1,image1.Height-1);//это рамка
form1.Image1.Canvas.Brush.Style:=bssolid;
form1.Image1.Canvas.Brush.Color:=clblack;
form1.Image1.Canvas.FloodFill(1,1,clblack,fsborder);
form1.Image1.Transparent:=true;
end;
SERG1980 вне форума Ответить с цитированием
Старый 04.05.2009, 17:47   #8
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Цитата:
Можно и с обычным имиджем поизвращаться
Спасибо. Этим способом только круг можно получить, да?
И ещё проблема, если я ставлю Stretch=True, то круг становиться очень маленьким диаметром. Можно как нибудь избежать этого?
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 04.05.2009, 22:00   #9
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
Сообщение от Лукманов Александр Посмотреть сообщение
Цитата:
DomiNick
А какие нужны?)
Transparent и BorderStyle=0;
В моей Делфи7 у TImage нету "BorderStyle"...
Цитата:
Спасибо. Этим способом только круг можно получить, да?
Ну так там же есть строка
Код:
form1.Image1.Canvas.Ellipse(1,1,image1.Width-1,image1.Height-1);//это рамка
Там что угодно можно рисовать...
Код:
form1.Image1.Canvas.RoundRect(1,1,300,300,40,40);
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Существует ли внешний компонент типа TImage, с возможностью изменения размера и положения в RunTime? Лукманов Александр Компоненты Delphi 8 28.04.2009 10:56
Создание перечислимого строкового типа с возможностью использовать как STRING Alex Cones Общие вопросы Delphi 2 21.04.2009 13:56
Как создать и отобразить на форме массив типа TImage YaFakir Мультимедиа в Delphi 3 26.03.2009 13:09
Сохранение загруженного в TImage изображения в папку с программой Torymo Помощь студентам 1 06.02.2009 03:41