Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
CheshireesCat
86 / 82 / 25
Регистрация: 02.05.2015
Сообщений: 760
#1

Вращение изображения - Delphi

19.04.2016, 02:01. Просмотров 1397. Ответов 14
Метки нет (Все метки)

Есть ли какой то компонент в который можно было бы загрузить изображение и вращать его?
к примеру если не ошибаюсь то в FMX у большинства компонентов есть такое свойство RotationAngl... но о своих проблемах с фмх(из-за которых работать с ним практически невозможно(( ) я уже писал, и решение так и не было найдено(((
Желательно поддержка прозрачности..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2016, 02:01
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вращение изображения (Delphi):

Вращение куба - Delphi
Здравствуйте, помогите мне очень быстро, пожалуйста, как создать вращение куба, хочу его повернуть, а никак. Вот здесь код unit...

Вращение матрицы - Delphi
На форуме не смог найти. Квадратная матрица. Повернуть её на 90 градусов вправо и влево. Организовать вывод повернутой матрицы в...

Вращение звезды - Delphi
Здравствуйте! Вот есть программа рисования звезды на правую/левую кнопку мыши. Как сделать так, чтобы при нажатии звезда еще и вращалась?...

Вращение восьмиугольника - Delphi
Подскажите, пожалуйста, как можно сделать вращение восьмиугольника вокруг центра, если использовать dx:=round(halflen*cos(t)) и...

Вращение отрезка - Delphi
Подскажите как осуществить вращение отрезка по градусам вокруг начальной точки (MoveTo(40,100)), градус вращения пользователь выбирает в...

вращение фигуры - Delphi
Написать процедуру вращения фигуры вокруг цента.Форму фигуры задать процедурным типом.Показать вращение различных трех фигур Добавлено...

14
BOGG ART
576 / 444 / 130
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
19.04.2016, 06:33 #2
Так елементов или изображений? FMX или GDI+ или GDI32?
0
krapotkin
3249 / 2889 / 785
Регистрация: 14.04.2014
Сообщений: 14,010
Записей в блоге: 12
19.04.2016, 07:56 #3
посмотрел тот пост
таскание элементов по форме вещь не очень понятная
у меня перемещение чего попало куда угодно не лагает и не оставляет следов...
возможно, проблема будет, если таскать сами компоненты FMX, ибо там и свистелок и перделок для кросс-платформы куча большая.
0
unifikator
490 / 348 / 176
Регистрация: 29.03.2015
Сообщений: 675
19.04.2016, 08:09 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Компонент "RotateImage".
Например, я его устанавливал так: выбрал в меню "Component\Install Component" и выбрал файл "RotImgReg.pas", далее реагировал на сообщения и на вкладке "Delphi Area" появился компонент "RotateImage".
У него есть свойство Angle, в котором задаётся угол поворота в градусах.
Изменял угол поворота по таймеру. Поставил интервал таймера на 100 миллисекунд. После добавления в "procedure TForm1.FormCreate(Sender: TObject);" строки "doublebuffered:=true;" изображение поворачивалось без искажений с большой скоростью.
Прилагаю проект компонента "RotateImage".
1
Вложения
Тип файла: zip rotateimage.zip (29.1 Кб, 56 просмотров)
unifikator
490 / 348 / 176
Регистрация: 29.03.2015
Сообщений: 675
19.04.2016, 08:17 #5
При установке свойства "UniqueSize" равным "false", размер компонента можно уменьшить до размера загруженного в него изображения. Если свойство "UniqueSize" равно "true", размер компонента увеличивается так, что при повороте видно всё загруженное в него изображение.
1
CheshireesCat
86 / 82 / 25
Регистрация: 02.05.2015
Сообщений: 760
19.04.2016, 15:41  [ТС] #6
Цитата Сообщение от BOGG ART Посмотреть сообщение
Так элементов или изображений? FMX или GDI+ или GDI32?
мне надо вращать или изображение или элемент в котором оно, делать это в VCL

Добавлено через 4 минуты
Цитата Сообщение от unifikator Посмотреть сообщение
Компонент "RotateImage".
после установки проект запускается чтобы установить компонент и выдаёт ошибки, допустим с библиотеками я решил ошибки дописав перед некоторыми vcl. Вроде установился, пойду проверять

Добавлено через 2 минуты
krapotkin, изза этого практически невозможно нормально построить внешний вид формы, изза этих миганий всего и везде..
0
BOGG ART
576 / 444 / 130
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
19.04.2016, 16:03 #7
На GDI32:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Procedure TForm1.DrawRotated(C: TCanvas; G: TGraphic; Const X0, Y0: Integer; Const AngleRad: Single = 0; Const Dx: Single = 0; Const Dy: Single = 0);
Var XF: TXForm;
Begin
XF.eM11:=1;
XF.eM12:=0;
XF.eM21:=0;
XF.eM22:=1;
XF.eDx:=-X0-Dx;
XF.eDy:=-Y0-Dy;
SetWorldTransform(C.Handle, XF);
XF.eM11:=Cos(AngleRad);
XF.eM12:=Sin(AngleRad);
XF.eM21:=-Sin(AngleRad);
XF.eM22:=Cos(AngleRad);
XF.eDx:=0;
XF.eDy:=0;
ModifyWorldTransform(C.Handle, XF, MWT_RIGHTMULTIPLY);
XF.eM11:=1;
XF.eM12:=0;
XF.eM21:=0;
XF.eM22:=1;
XF.eDx:=X0+Dx;
XF.eDy:=Y0+Dy;
ModifyWorldTransform(C.Handle, XF, MWT_RIGHTMULTIPLY);
C.Draw(X0, Y0, G);
ModifyWorldTransform(C.Handle, XF, MWT_IDENTITY);
End;
На GDI+ будет покачественнее, и приблизительно также, но сходу не нашёл.
А тот модуль как я понял создаёт дубликат картинки, крутит его пиксели по формулам.
1
CheshireesCat
86 / 82 / 25
Регистрация: 02.05.2015
Сообщений: 760
19.04.2016, 16:23  [ТС] #8
unifikator, [dcc32 Fatal Error] Unit1.pas(7): F1026 File not found: 'D:\users\Cheshirees\Документы\Embarcadero\Studio\Projects\RotImg.dcu'

Добавлено через 3 минуты
Цитата Сообщение от BOGG ART Посмотреть сообщение
GDI32
никогда не слышал ни о GDI32 ни о GDI+
сейчас читаю материал

Добавлено через 2 минуты
" представляет собой интерфейс, который Windows использует для рисования 2D графики. Также это самый медленный способ отображения графики из существующих"
0
BOGG ART
576 / 444 / 130
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
19.04.2016, 16:33 #9
Это не так. Все окна рисуются на GDI. Всё что есть на экране кроме оверлеев рисует GDI. Было бы это медленно - никто бы не покупал винду.
Неоптимально - это да. GDI32 - первая, старая, полностью на процессоре. GDI+ где-то с XP штоле появилась, частично слегка задействует DirectX. Качественнее изображение (при растягивании или поворотах например).

Так дайте ему этот файл! С:
0
CheshireesCat
86 / 82 / 25
Регистрация: 02.05.2015
Сообщений: 760
19.04.2016, 16:36  [ТС] #10
Цитата Сообщение от BOGG ART Посмотреть сообщение
Так дайте ему этот файл!
так нет его в архиве)

Добавлено через 37 секунд
сейчас читаю о Graphics32
0
unifikator
490 / 348 / 176
Регистрация: 29.03.2015
Сообщений: 675
19.04.2016, 16:45 #11
Инсталляция компонента.

1. Распаковал "rotateimage.zip" в папку "rotateimage".
2. В Delphi выбрал в меню "File\Close All".
3. Выбрал в меню "Component\Install Component...".
4. Напротив "Unit file name:" нажал кнопку "Browse".
5. Зашёл в папку "rotateimage" и открыл файл "RotImgReg.pas".
6. Нажал кнопку "OK".
7. На вопрос "Continue?" нажал кнопку "Yes".
8. На сообщение о регистрации компонента нажал кнопку "OK".
9. Выбрал в меню "File\Save All".
10. Выбрал в меню "File\Close All".

Создание приложения.

1. В Delphi выбрал в меню "File\New\Application".
2. На палитре "Delphi Area" дважды нажал "Rotate Image".

Никаких ошибок замечено не было!
0
CheshireesCat
86 / 82 / 25
Регистрация: 02.05.2015
Сообщений: 760
19.04.2016, 17:08  [ТС] #12
unifikator, в общем эту проблему решил, во первых закинул RotImg.pas в проект а во вторых закомментировал в нём строку
Delphi
1
//{$I DELPHIAREA.INC}
0
BOGG ART
576 / 444 / 130
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
19.04.2016, 17:24 #13
оу... Он должен был видимо скомпилиться... А если такой же pas в папку проекта?

GDI32 - базовое для Windows, даже самых древних.
GDI+ (GDIP) - улучшенное для Windows, шаг выше в качестве, добавлена поддержка полупрозрачности.
Они встроены в ОС, они есьм основное API. Всё остальное - поделки разных профи и не очень.
Дальше только OpenGL и DirectX - они молотят на видеокарте и по трём координатам.
0
CheshireesCat
86 / 82 / 25
Регистрация: 02.05.2015
Сообщений: 760
19.04.2016, 17:26  [ТС] #14
BOGG ART, да из тог что я прочитал, она(библиотека?) в целом более чем удовлетворит мои потребности.. но как её правильно подключать и работать с ней?
0
BOGG ART
576 / 444 / 130
Регистрация: 09.12.2013
Сообщений: 2,384
Записей в блоге: 2
19.04.2016, 18:47 #15
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
GDI32 всегда доступна в Win-проекте, оно в Winapi.Windows. И всякие Canvas.* переадресовываются туды.
GDI+ должен быть в каком-нить Winapi.GDIPAPI и Winapi.GDIPOBJ.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
unit Unit1;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
  Vcl.Imaging.pngimage, Vcl.ExtCtrls, Math,
  Winapi.GDIPAPI, Winapi.GDIPOBJ;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    I: GpBitmap;
    Ang: Integer;
    Procedure DrawRotated(G: GpGraphics; Const X0, Y0: Integer; Const Angle: Single = 0; Const Dx: Single = 0; Const Dy: Single = 0);
  public
    { Public declarations }
  end;
 
Var Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
var S: TMemoryStream; A: TStreamAdapter;
begin
DoubleBuffered:=True;
S:=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(S); // Сами добавьте проверки чтоб там что-то было
A:=TStreamAdapter.Create(S, soReference); // Не знаю что за магия, тока что нагуглил
S.Seek(0, soFromBeginning);
GdipCreateBitmapFromStream(A, I); // Но из S грузить не хотело, а только из некоего адаптера грузит
// A.Free; // Удаляться не хочет, но возможно GDI+ сам почистит
S.Free;
end;
 
procedure TForm1.FormDestroy(Sender: TObject);
begin
// GdipimaDisposeImage(I); // Почему-то вылетает, может перепутал функцию или хз что
end;
 
procedure TForm1.FormPaint(Sender: TObject);
var G: GpGraphics;
begin
Canvas.Lock;
GdipCreateFromHDC(Canvas.Handle, G);
// GdipSetInterpolationMode(G, InterpolationModeNearestNeighbor); // Рисовать с низким качеством - как у GDI32
DrawRotated(G, 160, 140, Ang, Image1.Picture.Graphic.Width/2, Image1.Picture.Graphic.Height/2);
GdipDeleteGraphics(G);
Canvas.Unlock;
end;
 
procedure TForm1.DrawRotated(G: GpGraphics; Const X0, Y0: Integer; Const Angle: Single = 0; Const Dx: Single = 0; Const Dy: Single = 0);
begin
GdipTranslateWorldTransform(G, -X0-Dx, -Y0-Dy, MatrixOrderAppend);
GdipRotateWorldTransform(G, Angle, MatrixOrderAppend);
GdipTranslateWorldTransform(G, X0+Dx, Y0+Dy, MatrixOrderAppend);
GdipDrawImageI(G, I, X0, Y0);
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(Ang, 2);
Repaint;
end;
 
end.
1
19.04.2016, 18:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2016, 18:47
Привет! Вот еще темы с ответами:

Вращение стрелки - Delphi
вот тут при последовательном вводе в едит1 координаты y и в едит2 координаты x: 150 и 50 ; 125 и 75 ; 150 и 50 ; 175 и 75, получим стрелку,...

Вращение параллелепипеда - Delphi
Написал прогу, где параллелепипед переносится. И пытаюсь сделать, чтобы он вращался вокруг координатных осей, но вместо этого он делает не...

вращение объекта shape - Delphi
Здравствуйте. Как фигуру (компонент Shape) вращать вокруг своей оси (оси у). Можно кодом пожалуйста!!! Спасибо. Добавлено через 1 час...

Вращение прямоугольника в Делфи 7 - Delphi
Здравствуйте, помогите пожалуйста написать программу вращения прямоугольника в делфи 7, Заранее огромное спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru