С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
-=Кристиночка=-
1 / 1 / 0
Регистрация: 23.01.2010
Сообщений: 60
1

Работа с изображением

22.02.2011, 20:07. Просмотров 1432. Ответов 11
Метки нет (Все метки)

Помогите пожалуйста очень нужна помощь, во ту меня есть картинка, нужна теперь кнопка при нажатии на которую картинка отображается сверху вниз
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2011, 20:07
Ответы с готовыми решениями:

Работа с изображением
Здравствуйте, дали курсовую, и я понял что нужно много работать с...

Delphi 7, blur, размытие изображения, работа с изображением
Ребят пишу с просьбой. Загружаю 2 холста изображения(смотреть код)....

Ошибка с Изображением
Доброго Времени Суток. У меня такая проблема, создал программу и к ней добавил...

Программа на делфи с графиком и изображением
пожалуйста помогите написать программы

Управление изображением на мониторе через COM порт
На экране отображается модель пассажирского или грузового лифта,к COM порту...

11
yamilramilev
265 / 257 / 46
Регистрация: 08.10.2009
Сообщений: 554
22.02.2011, 22:13 2
сверху вниз это перевернуто вверх ногами чтоли?
0
-=Кристиночка=-
1 / 1 / 0
Регистрация: 23.01.2010
Сообщений: 60
22.02.2011, 23:28  [ТС] 3
да...ну как в Paint.NET функция
0
ArtGrek
425 / 53 / 15
Регистрация: 31.12.2010
Сообщений: 191
22.02.2011, 23:47 4
учитеси рулить поиском
поворот изображения на лубои заданыи в Edit угол
0
yamilramilev
265 / 257 / 46
Регистрация: 08.10.2009
Сообщений: 554
22.02.2011, 23:50 5
скопируй код сюда, ссылка на другие форумы запрещены
0
-=Кристиночка=-
1 / 1 / 0
Регистрация: 23.01.2010
Сообщений: 60
23.02.2011, 02:06  [ТС] 6
Код:

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
procedure RotateBitmap(Bitmap: TBitmap; Angle: Double; BackColor: TColor);
type TRGB = record
       B, G, R: Byte;
     end;
     pRGB = ^TRGB;
     pByteArray = ^TByteArray;
     TByteArray = array[0..32767] of Byte;
     TRectList = array [1..4] of TPoint;
 
var x, y, W, H, v1, v2: Integer;
    Dest, Src: pRGB;
    VertArray: array of pByteArray;
    Bmp: TBitmap;
 
  procedure SinCos(AngleRad: Double; var ASin, ACos: Double);
  begin
    ASin := Sin(AngleRad);
    ACos := Cos(AngleRad);
  end;
 
  function RotateRect(const Rect: TRect; const Center: TPoint; Angle: Double): TRectList;
  var DX, DY: Integer;
      SinAng, CosAng: Double;
    function RotPoint(PX, PY: Integer): TPoint;
    begin
      DX := PX - Center.x;
      DY := PY - Center.y;
      Result.x := Center.x + Round(DX * CosAng - DY * SinAng);
      Result.y := Center.y + Round(DX * SinAng + DY * CosAng);
    end;
  begin
    SinCos(Angle * (Pi / 180), SinAng, CosAng);
    Result[1] := RotPoint(Rect.Left, Rect.Top);
    Result[2] := RotPoint(Rect.Right, Rect.Top);
    Result[3] := RotPoint(Rect.Right, Rect.Bottom);
    Result[4] := RotPoint(Rect.Left, Rect.Bottom);
  end;
 
  function Min(A, B: Integer): Integer;
  begin
    if A < B then Result := A
             else Result := B;
  end;
 
  function Max(A, B: Integer): Integer;
  begin
    if A > B then Result := A
             else Result := B;
  end;
 
  function GetRLLimit(const RL: TRectList): TRect;
  begin
    Result.Left := Min(Min(RL[1].x, RL[2].x), Min(RL[3].x, RL[4].x));
    Result.Top := Min(Min(RL[1].y, RL[2].y), Min(RL[3].y, RL[4].y));
    Result.Right := Max(Max(RL[1].x, RL[2].x), Max(RL[3].x, RL[4].x));
    Result.Bottom := Max(Max(RL[1].y, RL[2].y), Max(RL[3].y, RL[4].y));
  end;
 
  procedure Rotate;
  var x, y, xr, yr, yp: Integer;
      ACos, ASin: Double;
      Lim: TRect;
  begin
    W := Bmp.Width;
    H := Bmp.Height;
    SinCos(-Angle * Pi/180, ASin, ACos);
    Lim := GetRLLimit(RotateRect(Rect(0, 0, Bmp.Width, Bmp.Height), Point(0, 0), Angle));
    Bitmap.Width := Lim.Right - Lim.Left;
    Bitmap.Height := Lim.Bottom - Lim.Top;
    Bitmap.Canvas.Brush.Color := BackColor;
    Bitmap.Canvas.FillRect(Rect(0, 0, Bitmap.Width, Bitmap.Height));
    for y := 0 to Bitmap.Height - 1 do begin
      Dest := Bitmap.ScanLine[y];
      yp := y + Lim.Top;
      for x := 0 to Bitmap.Width - 1 do begin
        xr := Round(((x + Lim.Left) * ACos) - (yp * ASin));
        yr := Round(((x + Lim.Left) * ASin) + (yp * ACos));
        if (xr > -1) and (xr < W) and (yr > -1) and (yr < H) then begin
          Src := Bmp.ScanLine[yr];
          Inc(Src, xr);
          Dest^ := Src^;
        end;
        Inc(Dest);
      end;
    end;
  end;
 
begin
  Bitmap.PixelFormat := pf24Bit;
  Bmp := TBitmap.Create;
  try
    Bmp.Assign(Bitmap);
    W := Bitmap.Width - 1;
    H := Bitmap.Height - 1;
    if Frac(Angle) <> 0.0
      then Rotate
      else
    case Trunc(Angle) of
      -360, 0, 360, 720: Exit;
      90, 270: begin
        Bitmap.Width := H + 1;
        Bitmap.Height := W + 1;
        SetLength(VertArray, H + 1);
        v1 := 0;
        v2 := 0;
        if Angle = 90.0 then v1 := H
                        else v2 := W;
        for y := 0 to H do VertArray[y] := Bmp.ScanLine[Abs(v1 - y)];
        for x := 0 to W do begin
          Dest := Bitmap.ScanLine[x];
          for y := 0 to H do begin
            v1 := Abs(v2 - x)*3;
            with Dest^ do begin
              B := VertArray[y, v1];
              G := VertArray[y, v1+1];
              R := VertArray[y, v1+2];
            end;
            Inc(Dest);
          end;
        end
      end;
      180: begin
        for y := 0 to H do begin
          Dest := Bitmap.ScanLine[y];
          Src := Bmp.ScanLine[H - y];
          Inc(Src, W);
          for x := 0 to W do begin
            Dest^ := Src^;
            Dec(Src);
            Inc(Dest);
          end;
        end;
      end;
      else Rotate;
    end;
  finally
    Bmp.Free;
  end;
end;
 
// Использование
RotateBitmap(Image1.Picture.Bitmap, StrToInt(Edit1.Text), clWhite);
Добавлено через 2 минуты
ужас я тут ничего не поняла(
0
ArtGrek
425 / 53 / 15
Регистрация: 31.12.2010
Сообщений: 191
23.02.2011, 02:30 7
ет все одна процедура скопируи ее после
Код
implementation

{$R *.dfm}
а потом вставь в онклик кноки ето
Код
RotateBitmap(Image1.Picture.Bitmap, StrToInt(Edit1.Text), clWhite);
0
-=Кристиночка=-
1 / 1 / 0
Регистрация: 23.01.2010
Сообщений: 60
23.02.2011, 02:57  [ТС] 8
вставила, но почему то картинка не крутиться
0
-=Кристиночка=-
1 / 1 / 0
Регистрация: 23.01.2010
Сообщений: 60
23.02.2011, 03:01  [ТС] 9
вот то что я начала делать, но не сделала(
0
Вложения
Тип файла: rar преддипломная практика.rar (232.7 Кб, 27 просмотров)
ArtGrek
425 / 53 / 15
Регистрация: 31.12.2010
Сообщений: 191
23.02.2011, 17:47 10
вот пробуите
1
Вложения
Тип файла: zip RotateImage.zip (797.9 Кб, 27 просмотров)
snake32
1665 / 1117 / 197
Регистрация: 26.02.2009
Сообщений: 4,136
Записей в блоге: 5
24.02.2011, 02:18 11
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function CreateVInverse( src:TBitMap ):TBitmap;
  var i,wc:integer;
begin
  Result := TBitMap.Create;
  Result.SetSize(src.Width, src.Height);
  Result.PixelFormat := src.PixelFormat;
  wc := 1; // only for pf8bit, pf16bit, pf24bit, pf32bit
  case src.PixelFormat of
    pf16bit:wc := 2;
    pf24bit:wc := 3;
    pf32bit:wc := 4;
  end;
  for i:=0 to src.Height-1 do
    Move(src.ScanLine(i)^, Result.ScanLine(src.Height-i-1)^, src.Width*wc );
end;
Ф-ия создаст перевёрнутый битмар
0
-=Кристиночка=-
1 / 1 / 0
Регистрация: 23.01.2010
Сообщений: 60
24.02.2011, 09:41  [ТС] 12
спасибо большое)

я теперь не могу туда воткнуть кнопку ВСТАВИТЬ, то есть при нажатии на нее мы можем добавить другую картинку в Image1 =(
0
24.02.2011, 09:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2011, 09:41

Delph, алгоритм фильтра для изображением, граничное условие
Нужна помощь с созданием промежуточного изображения на которое будет...

Работа с изображением не стандартных форм
У меня есть довольно необычный вопрос... Допустим есть некая геометрическая...

Работа с изображением
Проблема, такого рода, имеется карта объекта, нужно раставить на этой карте...


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

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

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