Манипуляции с частями изображения

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Манипуляции с частями изображения

Сообщение Bananbl4 » 21.01.2011 16:38:53

Доброго времени суток, товарищи!
Хотелось бы уточнить кое-что (лазарус использую 3 дня, до этого был знаком с MIDlet Pascal).
Вот код кое-как сообразил для открытия картинки из файла:
Код: Выделить всё
  OpenDialog1.Execute;
  filename := OpenDialog1.FileName;
  Image1.Picture.PNG.Create;
  Image1.Picture.PNG.LoadFromFile(filename);
  Image1.Repaint;
  Image2.Picture.PNG.Create;

В общем, мне нужно копировать (с прозрачностью) части Image1 и вставлять их в определённое место Image2.
И ещё отразить одну часть по горизонтали.
Помогите, пожалуйста, подскажите, как это можно сделать.
Заранее спасибо.

P.S. Lazarus 0.9.28.2, Win32bit
Bananbl4
незнакомец
 
Сообщения: 3
Зарегистрирован: 20.01.2011 16:22:06
Откуда: Регион 70

Re: Манипуляции с частями изображения

Сообщение Verx0Laz » 22.01.2011 05:19:54

Может, я не верно понял вопрос, но когда-то что-то подобное решал под Delphi. Делал поддержку скинов для формы с масштабированием. Тоже работа с картинкой, масками, перерисовкой, прозрачностью и т.п. В итоге получился хоть и малофункциональный, но довольно увесистый модуль.
Уважаемый Bananbl4, я подозреваю, что полностью решать за вас вашу задачу, здесь никто не хочет. Вы не могли бы более узко конкретизировать ваш вопрос?
Аватара пользователя
Verx0Laz
постоялец
 
Сообщения: 125
Зарегистрирован: 11.09.2007 11:24:07

Re: Манипуляции с частями изображения

Сообщение daesher » 22.01.2011 09:59:52

Bananbl4 писал(а):Вот код кое-как сообразил для открытия картинки из файла:
Код: Выделить всё
  OpenDialog1.Execute;
  filename := OpenDialog1.FileName;
  Image1.Picture.PNG.Create;
  Image1.Picture.PNG.LoadFromFile(filename);
  Image1.Repaint;
  Image2.Picture.PNG.Create;


Не совсем понимаю, зачем такие сложности. Гораздо проще было бы
Код: Выделить всё
  if not OpenDialog1.Execute then exit;//А вдруг нажали Cancel?
  filename := OpenDialog1.FileName;
  Image1.Picture.LoadFromFile(filename);
  Image2.Picture.PNG.SetSize(100,100);
  R:=Rect(0,0,70,70);
  Image2.Picture.PNG.Canvas.CopyRect(R,Image1.Picture.Bitmap.Canvas,R);
  Image2.Repaint;         

Разумеется, размеры я даю "на шару". О прозрачности пока не говорю.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Манипуляции с частями изображения

Сообщение Bananbl4 » 22.01.2011 10:08:31

daesher, спасибо.
А насчет прозрачности что-нибудь придумаю (можно залить края прозрачным цветом).

И еще я нашел похожую функцию Image2.Picture.PNG.Canvas.CopyRect(x,y:integer;canvas:TFPCustomCanvas;SourceRect:TRect);
но когда пытаюсь её использовать, компилятор ругается на "неверное число параметров функции".
Странно это. Две функции под одним названием.

Нашел класс BGRABitmap с поддержкой прозрачности. Начинаю укрощать.
Bananbl4
незнакомец
 
Сообщения: 3
Зарегистрирован: 20.01.2011 16:22:06
Откуда: Регион 70

Re: Манипуляции с частями изображения

Сообщение daesher » 22.01.2011 19:50:35

Bananbl4 писал(а):daesher, спасибо.

Странно это. Две функции под одним названием.

Ничего странного - функция практически одна и та же, просто перегрузили (overload) для использования с другими, кому-то более удобными, параметрами. На 90 % уверен, что одна вызывает другую. Так что не надо заморачиваться, какая вызывается без проблем, ту и используйте.
daesher
постоялец
 
Сообщения: 221
Зарегистрирован: 09.03.2010 22:17:14

Re: Манипуляции с частями изображения

Сообщение Bananbl4 » 23.01.2011 10:51:40

Разобрался с наложениями.
Один вопрос остался: можно ли как-нибудь отразить по горизонтали изображение или его часть?
Bananbl4
незнакомец
 
Сообщения: 3
Зарегистрирован: 20.01.2011 16:22:06
Откуда: Регион 70


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 21

Рейтинг@Mail.ru